HttpClient并从服务器响应中提取音频

时间:2011-08-31 21:01:18

标签: mp3 httpclient

我正在使用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]);

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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