Java ReadableByteChannel和FileOutputStream只提供从Soundcloud下载的28字节文件

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); }

我正在使用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);
    } 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。再次感谢