Java在复制或下载时header中Content-Disposition的意义以及Content-disposition中Attachment和inline的意思转载
原创Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加文件。什么时候 Internet Explorer 接收到标头,它被激活 文件下载 对话框中,其文件名框将自动填充标题中指定的文件名。(请注意,这是由于设计原因;如果不询问用户将文档保存到何处,则无法使用此功能将文档保存至用户的计算机。)
当服务器向客户端浏览器发送文件时,如果该文件是浏览器支持的文件类型,通常默认情况下浏览器会打开该文件,例如txt、jpg等等,将直接显示在浏览器中,如果需要提示用户保存,必须使用。Content-Disposition要解决这个问题,关键是添加attachment:
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.txt");
注意:这样,浏览器将提示是保存还是打开它。即使您选择打开它,也会使用相关程序(如记事本)打开它IE它直接打开了。
Content-Disposition当用户希望将请求的内容保存为文件时,它将提供默认文件名。具体定义如下:
content-disposition = “Content-Disposition” “:”
disposition-type *( “;” disposition-parm )
disposition-type = “attachment” | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = “filename” “=” quoted-string
disp-extension-token = token
disp-extension-parm = token “=” ( token | quoted-string )
那么具体的例子可以从上面看到:
Content-Disposition: attachment; filename=“filename.xls”
当然filename参数可以包含路径信息,User-Agnet此信息将被忽略,仅路径信息的最后一部分将用作文件名。当您处于响应类型时。application/octet- stream如果您在这种情况下使用此标题信息,这意味着您不想直接显示内容,但会弹出“文件下载”对话框,然后由您决定“打开”还是“保存” 了。
注意事项:
1.当代码在内部使用时。Content-Disposition确保浏览器弹出下载对话框。 response.addHeader("Content-Disposition","attachment");一定要确保你没有做任何关于禁止浏览器缓存的事情。如下:
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
否则,您会发现下载功能位于 opera 和 firefox 里面很好,没问题,里面IE以下内容为否,但找不到该文档。
Java Web 在中下载文件时,我们的一般设置 Content-Disposition 告诉浏览器下载文件的名称,是否在浏览器中嵌入显示.
Content-disposition: inline; filename=foobar.pdf
指示浏览器内联显示文件。
Content-disposition: attachment; filename=foobar.pdf
指示将下载文件。,例如Firefox浏览器
spring mvc中
- @ResponseBody
- @RequestMapping(value = "/download",produces="application/octet-stream")
- public byte[] downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2)
- throws IOException {
- byte[]bytes=FileUtils.getBytes4File("D:\Temp\cc.jpg");
- response.addHeader("Content-Disposition", "inline;filename=\"a.jpg\"");
- return bytes;
- }
如上述代码所示,嵌入的显示图片?或者你可以播放盒子下载它?
答案是:弹框下载
为什么呢?设置为inline它应该是嵌入式显示器!
因为response content type设置成了"application/octet-stream"
注意:比如嵌入式显示或下载,那 它必须用于可以内联显示的类型。 ,例如"image/jpeg","image/png"等.
请看下面的示例:设置response content type为" image/jpeg "
-
@ResponseBody
-
@RequestMapping(value = "/download",produces="image/jpeg")
-
public byte[] downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2,String downloadType)
-
throws IOException {
-
byte[]bytes=FileUtils.getBytes4File("D:\Temp\cc.jpg");
-
response.addHeader("Content-Disposition", downloadType+";filename=\"a.jpg\"");
-
return bytes;
-
}
在浏览器中访问:http://localhost:8080/tv\_mobile/video/download?downloadType=inline 当嵌入式显示器:
在浏览器中访问时:http://localhost:8080/tv\_mobile/video/download?downloadType=attachment 当弹出框下载.
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123

