アップロードされたファイルをダウンロードする機能を現在実装中です。Spring MVCでファイルをダウンロードするときに "名前を付けて保存"ウィンドウをポップアップする方法は?
機能は正常に動作します。[名前を付けて保存]ウィンドウは表示されません。
ダウンロード機能を実行するコードを添付します。
DownLoadView.java
public class DownLoadView extends AbstractView
{
private File file;
public DownLoadView(File file)
{
setContentType("application/octet-stream");
this.file = file;
}
@Override
protected void renderMergedOutputModel(Map<String, Object> arg0, HttpServletRequest req, HttpServletResponse resp)
throws Exception
{
resp.setContentType(getContentType());
resp.setContentLength((int) file.length());
System.out.println("getContentType >> " + resp.getContentType());
String userAgent = req.getHeader("User-Agent");
boolean ie = userAgent.indexOf("MSIE") > -1;
String fileName = file.getName();
if(ie)
{
fileName = URLEncoder.encode(file.getName(), "utf-8").replaceAll("\\+", "%20");
}
else
{
fileName = new String(file.getName().getBytes("utf-8")).replaceAll("\\+", "%20");
}
resp.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream out = resp.getOutputStream();
FileInputStream fis = null;
System.out.println("resp : " + resp);
try
{
fis = new FileInputStream(file);
FileCopyUtils.copy(fis, out);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(fis != null)
{
try
{
fis.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
out.flush();
}
}
私は、ファイルのダウンロード機能を実装するためにMIME-TYPEとのContent-Typeを研究。その結果、
は、私の知る限り、「名前を付けて保存」機能を実行するには、
resp.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
を伝えることができるように私はあなたの「Content-処分」に設定する必要があることがわかりました。
そのまま設定しますが、[名前を付けて保存]ウィンドウは表示されません。 ContentTypeをのログを取った結果、 (私はChromeでブラウザを開くと)
、
getContentType >> application/octet-stream;charset=UTF-8
は、私はそれが上記のログのように設定されていることを確認しました。
何かが間違って設定されていて、[名前を付けて保存]ウィンドウが表示されません。
何が間違っているか教えていただけたらと思います。
ああ、もう1つ質問です。
これらのことをテストするには、Microsoft EdgeブラウザとFirefoxブラウザからファイルをダウンロードしようとしました。
エッジの場合、[名前を付けて保存]ウィンドウが開きます。
fire foxの場合、[名前を付けて保存]ウィンドウは表示されません。 ただし、ファイルを開くか保存するかのチェックウィンドウが開きます。
これは、各ブラウザのプロパティのためですか。
- ロジックに[名前を付けて保存]ウィンドウが表示されないのはなぜですか?
- ファイルをダウンロードすると、ブラウザの種類ごとにファイルダウンロードウィンドウが表示されるのはなぜですか。