1

我正在使用Java, aReadableByteChannelFileOutputStream尝试从 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 bytes (4 KB on disk)

显然我做错了什么。任何人都可以帮助我或指出我正确的方向吗?

4

2 回答 2

0

查看实际收到的数据。也许它是一个错误响应(例如,它响应一个仅包含无效请求信息的文档<error>401 - Unauthorized</error>其他一些状态响应。

假设是这种情况,可能是您发送的 ID 或会话密钥存在问题,或者您忘记了请求中一些必需的 HTTP 标头(我对 SoundCloud API 不是特别熟悉)。

于 2013-11-08T07:40:13.403 回答
-1

我同意@JasonC 的观点,您可能有错误响应,但无论如何都没有说transferTo()传输全部内容。它返回一个转移计数。您必须循环调用它。

于 2013-11-08T08:52:19.433 回答