由于业务需要,最近从OSS新创建了一个bucket,使用之前的上传代码进行上传图片时可以看到图片上传成功,但是打开图片地址之后不能正常访问,浏览器会提示进行下载.好奇同样的代码,另一个bucket能正常上传,但是新创建的bucket使用同样代码之后就出现这个问题,怀疑是bucket配置问题,仔细翻阅资料之后终于知道了是哪的问题,在此简单记录一下.

官方说明:访问您的图片文件,无法预览,直接下载,是由于从从2019年9月23日起,针对之后新建的Bucket,直接使用OSS提供的默认域名,从互联网访问OSS上该Bucket的图片类型文件时,mimetype为以下值,Response
Header中会自动加上Content-Disposition:'attachment=filename;'。即从浏览器访问图片类型文件时,会以附件形式进行下载,如果您要直接在浏览器中预览文件而非下载文件,请设置文件HTTP头中的Content-Disposition为inline并使用Bucket绑定的自定义域名进行访问

        首先处理的第一个问题就是需要配置一个自定义的域名,这个规则是从2019.9.23之后开始生效的,就是说从2019.9.23之后创建的bucket需要配置已备案的域名,查看了一下之前的bucket是2019.6月份,当时没有配置备案域名也可以访问.域名配置可以参考:https://help.aliyun.com/document_detail/195675.htm?spm=a2c4g.11186623.0.0.736922936aZ1CL#task-2010682
另外记录一下其他的处理方案:
        因Content-Type设置导致的强制下载问题,您需要根据文件类型设置合理的Content-Type,同时确保浏览器支持预览该文件类型。关于Content-Type的更多信息,请参见如何设置Content-Type(MIME)
        因Content-Disposition设置导致的强制下载问题,您需要将Object Meta中的Content-Disposition设置为inline。具体步骤,请参见管理文件元信息
        因CDN缓存导致的强制下载问题,您需要更新CDN缓存信息。
        因浏览器不支持预览文件格式导致的强制下载,您需要确认浏览器已安装支持预览当前格式文件的插件。
        最后附上官方参考链接:如何配置访问OSS文件时是预览行为?
2023.11.19补充:文件上传文件名为中文名,上传成功后地地址中阿里云已对中文进行转码,如下图:
在这里插入图片描述
上述地址浏览器打开会默认转码为中文,可以直接预览打开在这里插入图片描述

如果服务端返回的地址中的文件名为未转码的中文(类似:https:a.com/测试.docx),从浏览器打开不能预览只能下载.对于客户端(小程序)此种地址可以支持直接访问,不影响使用.如果想和阿里云存储地址保持一致,服务端在上传接口返回地址中可以对上传的中文文件名进行转码.参考:

 	 String parameter = "关于开的通知.docx";
        String encodedParameter = URLEncoder.encode(parameter, "UTF-8");
        System.out.println(encodedParameter);
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐