Java在复制或下载时header中Content-Disposition的意义以及Content-disposition中Attachment和inline的意思转载

原创
小哥 3年前 (2022-11-11) 阅读数 11 #大杂烩

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

否则,您会发现下载功能位于 operafirefox 里面很好,没问题,里面IE以下内容为否,但找不到该文档。

Java Web 在中下载文件时,我们的一般设置 Content-Disposition 告诉浏览器下载文件的名称,是否在浏览器中嵌入显示.

Content-disposition: inline; filename=foobar.pdf

指示浏览器内联显示文件。

Content-disposition: attachment; filename=foobar.pdf

指示将下载文件。,例如Firefox浏览器

spring mvc中

  1. @ResponseBody
  2. @RequestMapping(value = "/download",produces="application/octet-stream")
  3. public byte[] downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2)
  4. throws IOException {
  5. byte[]bytes=FileUtils.getBytes4File("D:\Temp\cc.jpg");
  6. response.addHeader("Content-Disposition", "inline;filename=\"a.jpg\"");
  7. return bytes;
  8. }

如上述代码所示,嵌入的显示图片?或者你可以播放盒子下载它?

答案是:弹框下载

为什么呢?设置为inline它应该是嵌入式显示器!

因为response content type设置成了"application/octet-stream"

注意:比如嵌入式显示或下载,那 它必须用于可以内联显示的类型。 ,例如"image/jpeg","image/png"等.

请看下面的示例:设置response content type为" image/jpeg "

  1. @ResponseBody

  2. @RequestMapping(value = "/download",produces="image/jpeg")

  3. public byte[] downloadFile(HttpServletRequest request, HttpServletResponse response,String contentType2,String downloadType)

  4. throws IOException {

  5. byte[]bytes=FileUtils.getBytes4File("D:\Temp\cc.jpg");

  6. response.addHeader("Content-Disposition", downloadType+";filename=\"a.jpg\"");

  7. return bytes;

  8. }

在浏览器中访问:http://localhost:8080/tv\_mobile/video/download?downloadType=inline 当嵌入式显示器:

在浏览器中访问时:http://localhost:8080/tv\_mobile/video/download?downloadType=attachment  当弹出框下载.

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除