Java ReadableByteChannel和FileOutputStream只提供从Soundcloud下载的28字节文件
我正在使用Java,一种可读的ByTechannel和FileOutputStream,尝试从Soundcloud中提取wav文件:Java ReadableByteChannel和FileOutputStream只提供从Soundcloud下载的28字节文件,java,soundcloud,fileoutputstream,Java,Soundcloud,Fileoutputstream,我正在使用Java,一种可读的ByTechannel和FileOutputStream,尝试从Soundcloud中提取wav文件: public static void wavTest() { URL website = null; try { website = new URL("https://api.soundcloud.com/tracks/123456789/download?client_id=12lhfdh5k55....283); }
public static void wavTest() {
URL website = null;
try {
website = new URL("https://api.soundcloud.com/tracks/123456789/download?client_id=12lhfdh5k55....283);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ReadableByteChannel rbc = null;
try {
rbc = Channels.newChannel(website.openStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream("/Users/name/Desktop/test.wav");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
URL在粘贴到浏览器和完整曲目下载时起作用,但无论我尝试使用上述代码下载哪些曲目,该文件始终具有以下属性:
磁盘上的28字节4 KB
很明显我做错了什么。有人能帮我解决问题或给我指出正确的方向吗?看看实际收到的数据。可能是一个错误响应,例如,它用一个只包含401-未授权的for或其他一些状态响应的文档进行响应
假设是这样,可能是您发送的ID或会话密钥有问题,或者您忘记了请求中需要的一些HTTP头,我对SoundCloud API不太熟悉。我同意@JasonC的说法,您可能有错误响应,但在任何情况下,都没有说transferTo可以传输全部内容。它返回一个转移计数。您必须循环调用它。谢谢您的回复,但这不是问题。正如我所说,我已经成功地从网上下载了wav,我刚刚注意到我使用Google Chrome从网上下载的wav的“Where from”信息给出了以下信息:http://ec-media.soundcloud.com/hrtIXvDAAAuN?ff61182e3c2ecefa438cd0210ad0e38569b9775ddc9e06b3c362ab87309651ead0b4d08ae06316aa9693d4d4b2172c08ae8d00e3b10a3fabf816c9d601&AWSAccessKeyId=AKIA... 所以,现在我认为问题在于某种类型的URL重定向问题,所以我将对此进行调查。您收到的数据的实际内容是什么?打印出这28个字节,或者在文本编辑器中打开文件。如果是wav文件的前28个字节,您必须继续挖掘,但如果是错误响应,它将立即为您提供线索。这很容易检查302-未发现任何错误。我不知道下一步该做什么!好啊这是一个重定向。我来看看这个:http://en.wikipedia.org/wiki/HTTP_302 为帮助干杯:-谢谢你的回复,但这不是问题。正如我所说,我已经成功地从网上下载了wav,我刚刚注意到我使用Google Chrome从网上下载的wav的“Where from”信息给出了以下信息:http://ec-media.soundcloud.com/hrtIXvDAAAuN?ff61182e3c2ecefa438cd0210ad0e38569b9775ddc9e06b3c362ab87309651ead0b4d08ae06316aa9693d4d4b2172c08ae8d00e3b10a3fabf816c9d601&AWSAccessKeyId=AKIA... 所以,现在我认为问题在于某种类型的URL重定向问题,所以我将对此进行调查。我还将研究transferTo。再次感谢