0

Java Spring プロジェクトのリソースから wav ファイルを読み取り、そのファイルをバイト配列に変換して HttpResponse の出力ストリームに書き込もうとしています。Web アプリケーションからファイルを受け取ると、ガベージ データで壊れています。

私のサーブレットのコードは次のとおりです。

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

どちらのアプローチも機能しますが、反対側に破損したオーディオ ファイルが表示されます。なぜこれが起こっているのか正確にはわかりません。ヘッダーとか関係あるの?

4

1 に答える 1

0

私は問題を理解しました。httpResponse などとはまったく関係がありませんでした。Wave ファイルを Java プロジェクトに追加し、そこから war ファイルをパッケージ化しました。しかし、プロジェクトをデプロイし、リソース ファイルが解凍されると、ファイルのサイズが元のサイズから変更され、不要な情報が導入されます。なぜそうなったのか、現在調査中です。しかし、この質問に関する限り、wave ファイルを正しいサイズのものに置き換えると動作します。お騒がせして申し訳ありません。

于 2012-07-01T09:01:58.703 に答える