【问题标题】:HttpClient and extracting audio from server responseHttpClient 并从服务器响应中提取音频
【发布时间】:2011-09-01 08:09:30
【问题描述】:

我正在使用 Apache HttpClient 连接到服务器以下载 .wav 文件。我在我的程序中使用 HTTP POST 方法。

服务器正确响应以下标头和正文:

> HTTP/1.1 200 OK\r\n Content-Disposition: attachment;
> filename=saveme1.mp3\r\n Content-Length: 6264\r\n
> Content-Transfer-Encoding: binary\r\n Content-Type: audio/mp3\r\n

现在如何从 HTTP 响应中提取 saveme1.mp3 文件?我正在使用以下代码:

       ResponseHandler<String> responseHandler = new BasicResponseHandler();
       byte[] data = httpclient.execute(httppost, responseHandler).getBytes();

但是,当我将数据写入文件时,我得到了垃圾。

FileOutputStream fileoutputstream = new FileOutputStream(outputFile);
for (int i = 0; i < data.length; i++) 
        fileoutputstream.write(data[i]);

【问题讨论】:

    标签: mp3 httpclient


    【解决方案1】:

    如果你想下载 mp3,我认为最简单的方法是:

    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    

    现在你有了实体,可以调用 entity.getContent();这给了你一个 inputStream ,现在你可以用你想要的每一种方法保存这个流,当然你需要 mime 类型和文件名来保存你的文件。如果您对文件名和 mime 类型有疑问,请告诉我添加一些示例代码。

    【讨论】:

      【解决方案2】:

      您将获得需要首先解析的 MIME 附件。 BasicResponseHandler 只返回响应字符串,但您需要包含 .mp3 二进制文件的附件正文。您需要执行以下步骤:

      • 了解 MIME 格式。您可以浏览Wikipedia Entry 以快速熟悉
      • 了解后,您需要创建一个 MIME 解析器。这基本上会提取 MIME 消息的每个部分,尤其是附件的正文。我认为应该有一些可以重复使用的东西。你可能应该看看MimeMultipart。我唯一不确定的是它是否处理您消息中的“二进制”编码。
      • 创建您自己的 ResponseHandler 扩展,该扩展将利用您在上一步中拥有的 MIME 解析器

      【讨论】:

      • 您需要实现自己的 ResponseHandler 来读取响应并获取内​​容正文。我猜其他人应该已经这样做了,你可以重复使用(尽管快速搜索并没有立即产生结果)。我会稍微扩展我的答案,以便您获得必要的步骤
      • 添加步骤。希望有帮助
      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2021-04-16
      相关资源
      最近更新 更多