哈尔滨建设网站公司吗,设置WordPress注册,淄博桓台网站建设方案,商务网站推广目标有哪些文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介
随着浏览器的发展#xff0c;有很多安全方面的限制#xff0c;对我们的文件下载行为产生了很大的影响。
在JavaScript下载… 文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介
随着浏览器的发展有很多安全方面的限制对我们的文件下载行为产生了很大的影响。
在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。
本篇我们将继续介绍2个问题
文件下载安全设置浏览器和服务端如何控制文件是下载还是打开
Chrome已阻止不安全内容下载
相信很多朋友都突然就遇到了每次下载文件都要点保留的糟心事怎么不要每次都确认呢
可以设置允许指定网站的不安全内容
设置- 隐私和安全 - 网站设置 - 不安全内容 PDF直接打开
Chrome对于自己支持的文件类型访问链接的时候是直接打开例如pdf、txt、xml、js
有很多非IT专业的业务老师可不知道可以文件另存为(ctrls)这种操作只知道下载不了。或者知道另存为但是只想下载文件不想直接打开还要自己另存为。
如果我们希望是下载文件而不是直接打开文件应该怎么办呢
对于PDF类型来说可以通过下面的方式设置
设置- 隐私和安全 - 网站设置 - 不安全内容 txt、xml、js文件被自动打开了而不是下载
Chrome针对PDF被直接打开不是下载有单独的设置但是对于txt、xml、js文件被自动打开而不是下载了怎么处理呢
答案是在response的header中设置Content-Disposition为attachment
后端设置
response.setHeader(Content-Disposition, attachment;filename fileName);浏览器看到response的Content-Disposition值为attachment就会执行下载操作而不是直接打开。
对于PDF来说如果Chrome已经设置了【在Chrome中打开PDF文件】,那么就算是response的Content-Disposition值为attachment还是会直接打开PDF文件。
阿里OSS设置response header
对于我们自己服务端好设置但是对于像oss组件这种如何设置呢
下面我们以阿里OSS设置来说明一下:
可以通过PutObjectRequest来设置
Test
public void uploadHeader() {String endpoint http://oss.com;String accessKeyId xxx;String accessKeySecret sssss;OSS ossClient new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String content Hello OSS;ByteArrayInputStream byteArrayInputStream new ByteArrayInputStream(content.getBytes());PutObjectRequest request new PutObjectRequest(bucketName,test/hello.txt,byteArrayInputStream);request.addHeader(Content-Disposition,attachment);ossClient.putObject(request);
}阿里OSS修改metadata
如果文件已经上传过了如何修改呢
我们可以通过拷贝的方式修改metadata
Test
public void metaHeader() {String endpoint http://oss.com;String accessKeyId xxx;String accessKeySecret sssss;OSS ossClient new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String objectName test/test030801.txt;CopyObjectRequest request new CopyObjectRequest(bucketName, objectName, bucketName, objectName);ObjectMetadata meta new ObjectMetadata();meta.setContentType(text/plain);meta.setContentDisposition(attachment);request.setNewObjectMetadata(meta);ossClient.copyObject(request);
}