0


浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)

文章目录

简介

随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。

在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。

本篇我们将继续介绍2个问题:

  1. 文件下载安全设置
  2. 浏览器和服务端如何控制文件是下载还是打开

Chrome已阻止不安全内容下载

相信很多朋友都突然就遇到了每次下载文件都要点保留的糟心事,怎么不要每次都确认呢?
安全阻止

可以设置允许指定网站的不安全内容:

设置-> 隐私和安全 -> 网站设置 -> 不安全内容

运行不安全内容

PDF直接打开

Chrome对于自己支持的文件类型,访问链接的时候是直接打开,例如pdf、txt、xml、js

有很多非IT专业的业务老师可不知道可以文件另存为(ctrl+s)这种操作,只知道下载不了。或者知道另存为,但是只想下载文件,不想直接打开,还要自己另存为。

如果我们希望是下载文件而不是直接打开文件应该怎么办呢?

对于PDF类型来说,可以通过下面的方式设置:

设置-> 隐私和安全 -> 网站设置 -> 不安全内容

PDF下载设置

txt、xml、js文件被自动打开了而不是下载

Chrome针对PDF被直接打开不是下载有单独的设置,但是对于txt、xml、js文件被自动打开而不是下载了怎么处理呢?

答案是在response的header中设置Content-Disposition为attachment

后端设置:

response.setHeader("Content-Disposition","attachment;filename="+ fileName);

Content-Disposition为attachment

浏览器看到response的Content-Disposition值为attachment,就会执行下载操作,而不是直接打开。

对于PDF来说,如果Chrome已经设置了【在Chrome中打开PDF文件】,那么就算是response的Content-Disposition值为attachment,还是会直接打开PDF文件。

阿里OSS设置response header

对于我们自己服务端好设置,但是对于像oss组件这种如何设置呢?

下面我们以阿里OSS设置来说明一下:

可以通过PutObjectRequest来设置

@TestpublicvoiduploadHeader(){String endpoint ="http://oss.com";String accessKeyId ="xxx";String accessKeySecret ="sssss";OSS ossClient =newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String content ="Hello OSS";ByteArrayInputStream byteArrayInputStream =newByteArrayInputStream(content.getBytes());PutObjectRequest request =newPutObjectRequest(bucketName,"test/hello.txt",byteArrayInputStream);
    request.addHeader("Content-Disposition","attachment");
    ossClient.putObject(request);}

阿里OSS修改metadata

如果文件已经上传过了,如何修改呢?

我们可以通过拷贝的方式修改metadata:

@TestpublicvoidmetaHeader(){String endpoint ="http://oss.com";String accessKeyId ="xxx";String accessKeySecret ="sssss";OSS ossClient =newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String objectName ="test/test030801.txt";CopyObjectRequest request =newCopyObjectRequest(bucketName, objectName, bucketName, objectName);ObjectMetadata meta =newObjectMetadata();
    meta.setContentType("text/plain");
    meta.setContentDisposition("attachment");
    request.setNewObjectMetadata(meta);
    ossClient.copyObject(request);}

本文转载自: https://blog.csdn.net/trayvontang/article/details/142854223
版权归原作者 trayvontang 所有, 如有侵权,请联系我们删除。

“浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)”的评论:

还没有评论