在HttpResponse中发送wav文件会使其损坏

时间:2012-06-28 10:16:03

标签: java audio download wav httpresponse

我正在尝试从Java Spring项目的资源中读取一个wav文件,然后将该文件转换为字节数组并将其写入HttpResponse的输出流。当我从我的Web应用程序收到该文件时,它会被垃圾数据破坏。

以下是我的servlet中的代码:

response.setContentType("audio/wav");
response.setHeader("Content-Disposition", "attachment;filename=audio-qrcode-"+"hellosine"+".wav");
response.setHeader("Pragma", "private");
response.setHeader("Cache-Control", "private, must-revalidate");
response.setHeader("Accept-Ranges", "bytes")

URL helloSineWav = QRcodeController.class.getClassLoader().getResource("hellosine.wav");
byte[] audioBytes = IOUtils.toByteArray(helloSineWav.openStream());
response.setContentLength(audioBytes.length);
ServletOutputStream outStream = response.getOutputStream();
outStream.write( audioBytes );
outStream.flush();
outStream.close();

我试图解决这个问题的另一种方法是:

ServletOutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) > 0) {
    out.write(buf, 0, len);
}
is.close();
out.close();

两种方法都有效但在另一端给我一个损坏的音频文件。我不确定为什么会这样。 是否与标题有关?

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。它与httpResponse或其中任何一个都没有关系。我将wave文件添加到Java Project并从中打包war文件。但是当我部署项目并且资源文件被解压缩时,它会更改原始文件的大小并引入一些垃圾信息。我目前正在研究为什么会这样。但就这个问题而言,当我用正确的大小替换波形文件时,它可以工作。很抱歉打扰你们。