ユーザーがサーバーから画像ファイルをダウンロードできるWebアプリケーションがあります。ユーザーがjspページのボタンを押すと、サーブレットを実行し、それに応じて画像ファイルを送信するajax postリクエストが行われます。しかし問題は、イメージ ファイルがダウンロードされず、[名前を付けて保存] ダイアログ ボックスが表示されないことです。
Firebug では、リクエストが正しく送信され、正しい Contect Type とステータス コード 200 で応答が受信されたことがわかります。firebug の [Response] タブにもバイナリ データが表示されますが、何らかの理由で画像がダウンロードされません。助けてください。
リクエスト:
*リクエスト URL:http://localhost:8080/SVGToImage/convertToImg
リクエスト方法:POST
ステータスコード:200 OK*
応答:
*Content-Disposition:filename="out.jpg"
コンテンツタイプ:image/jpeg
日付:2013 年 5 月 31 日 (金) 17:28:26 GMT
サーバー:Apache-Coyote/1.1
Transfer-Encoding:chunked*
ここに私のJSPがあります
<head>
<script>
function exportToImage(){
var svg = document.getElementById("ext-gen1040");
var svg1 = new XMLSerializer().serializeToString(svg);
jQuery.noConflict();
jQuery.ajax({
url: "convertToImg" ,
type: "POST",
data: { q = svg1},
success: function(data) {
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error ' + textStatus);
}
});
</script>
</head>
<body>
<input type="button" value="export" onclick="javascript:exportToImage();">
</body>
サーバー側では、サーブレット コードは次のとおりです。
private void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String filePath = "C:/Users/nandan.jain/Pictures/out.jpg";
File file = new File(filePath);
int length = 0;
ServletOutputStream outStream = response.getOutputStream();
response.setContentType("image/jpeg");
response.setContentLength((int)file.length());
String fileName = (new File(filePath)).getName();
// sets HTTP header
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
byte[] byteBuffer = new byte[BUFSIZE];
DataInputStream in = new DataInputStream(new FileInputStream(file));
// reads the file's bytes and writes them to the response stream
while ((in != null) && ((length = in.read(byteBuffer)) != -1))
{
outStream.write(byteBuffer,0,length);
}
in.close();
outStream.close();
}
ありがとう