集成OSS浏览器下载上传的文件想使用原文件名【设置header】

本文介绍了阿里云OSS如何通过设置Object的HTTP标准属性,如Content-Type、Content-Encoding、Content-Disposition等,来控制上传和下载文件的行为,包括自定义文件名下载。同时提到如何在Java代码中封装这些元数据进行上传。
摘要由CSDN通过智能技术生成

OSS将为上传至Bucket中的每个Object保留如下HTTP标准属性。

名称描述
Content-Type指定Object的文件类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定文件类型,则根据文件的扩展名生成。如果文件没有扩展名,则文件类型的默认值application/octet-stream。Content-Type的常见设置请参见如何设置Content-Type(MIME)?
Content-Encoding声明Object的编码方式。您需要按照Object 的实际编码类型填写,否则可能造成客户端(浏览器)解析编码失败或Object下载失败。若Object未编码,请置空此项。取值如下:
  • identity(默认值):表示Object未经过压缩或编码。
  • gzip:表示Object采用Lempel-Ziv(LZ77)压缩算法以及32位CRC校验的编码方式。
  • compress:表示Object采用Lempel-Ziv-Welch(LZW)压缩算法的编码方式。
  • deflate:表示Object采用zlib结构和deflate压缩算法的编码方式。
  • br:表示Object采用Brotli算法的编码方式。

关于Content-Encoding的更多信息,请参见RFC2616

重要

如果您希望访问OSS内常见网页静态文件(HTML、Javascript、XML、json)时进行Gzip压缩,您需要置空此项,并在请求中增加Accept-Encoding: gzip

Content-Language声明Object内容使用的语言。例如某个Object使用简体中文编写,则此项可设置为zh-CN。
Content-Disposition指定Object的展示形式。取值如下:
  • Content-Disposition:inline:直接预览文件内容。
  • Content-Disposition:attachment:以原文件名的形式下载到浏览器指定路径。
  • Content-Disposition:attachment; filename="yourFileName":以自定义文件名的形式下载到浏览器指定路径。

    yourFileName用于自定义下载后的文件名称,例如example.jpg。

将Object下载到浏览器指定路径时:

说明

  • 如果Object名称包含星号(*)、正斜线(/)等特殊字符时,可能会出现特殊字符转义的情况。例如,下载example*.jpg到本地时,example*.jpg可能会转义为example_.jpg
  • 如需确保下载名称中包含中文字符的Object到本地指定路径后,文件名称不出现乱码的现象,您需要将名称中包含的中文字符进行URL编码。例如,将测试.txt从OSS下载到本地后,需要保留文件名为测试.txt,需按照"attachment;filename="+URLEncoder.encode("测试","UTF-8")+".txt;filename*=UTF-8''"+URLEncoder.encode("测试","UTF-8")+".txt")的格式设置Content-Disposition,即attachment;filename=%E6%B5%8B%E8%AF%95.txt;filename*=%E6%B5%8B%E8%AF%95.txt。

通过文件URL访问文件时是预览还是以附件形式下载,与文件所在Bucket的创建时间、OSS开通时间以及使用的域名类型有关。更多信息,请参见通过文件URL访问文件无法预览而是以附件形式下载?

Cache-Control指定Object的缓存行为。取值如下:
  • no-cache:不可直接使用缓存,而是先到服务端验证Object是否已更新。如果Object已更新,表明缓存已过期,需从服务端重新下载Object;如果Object未更新,表明缓存未过期,此时将使用本地缓存。
  • no-store:所有内容都不会被缓存。
  • public:所有内容都将被缓存。
  • private:所有内容只在客户端缓存。
  • max-age=<seconds>:缓存内容的相对过期时间,单位为秒。此选项仅在HTTP 1.1中可用。
Expires缓存内容的绝对过期时间,格式是格林威治时间(GMT)。例如2022-10-12T00:00:00.000Z。如果Cache-Control设置了max-age=<seconds>,以max-age=<seconds>为准。
Last-ModifiedObject的最后修改时间。
Content-LengthObject的大小,单位为字节。

那么我们知道只要根据这个Content-Disposition的规则在上传文件的时候把自己的原文件名封装在Header里面不就大功告成了,那么要怎么封装进去呢

ObjectMetadata objectMetadata = new ObjectMetadata();
//filenameWithoutExtension是你自己的不带后缀的原文件名,fileExtension 是你带.的后缀名,比如.txt           
String disposition = "attachment;filename=" + URLEncoder.encode(filenameWithoutExtension, "UTF-8") + fileExtension + ";filename*=UTF-8''" + URLEncoder.encode(filenameWithoutExtension, "UTF-8") + fileExtension;

this.ossClient.putObject(this.getBucketName(bucketName), key, stream, objectMetadata);

就这一步之后就可以使用自己的原文件名下载啦

参考:https://help.aliyun.com/zh/oss/user-guide/manage-object-metadata-10

 集成OSS上传文件:Java简单上传 - 对象存储 OSS - 阿里云

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤实现: 1. 引入OSS SDK 在 `composer.json` 文件添加 `aliyuncs/oss-sdk-php` 依赖,并执行 `composer update` 命令。 2. 创建OSS客户端 使用 `AccessKeyId` 和 `AccessKeySecret` 创建一个OSS客户端对象,示例代码如下: ``` use OSS\OssClient; use OSS\Core\OssException; $accessKeyId = "yourAccessKeyId"; $accessKeySecret = "yourAccessKeySecret"; $endpoint = "yourEndpoint"; $bucket = "yourBucketName"; try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); } catch (OssException $e) { print $e->getMessage(); } ``` 3. 下载图片并修改文件名 将完整的OSS图片路径拆分为 `bucket` 和 `object` 两部分,使用 `getObject` 方法下载图片并修改文件名,示例代码如下: ``` $url = "yourOSSImageUrl"; // OSS图片的完整路径,例如:https://yourBucketName.oss-cn-hangzhou.aliyuncs.com/yourObjectName.jpg $filename = "yourNewFileName"; // 新的文件名 $url_arr = parse_url($url); $bucket = $url_arr['host']; $object = ltrim($url_arr['path'], '/'); $options = array( OssClient::OSS_HEADERS => array( 'Content-Disposition' => 'attachment;filename="'.$filename.'"' ) ); try { $ossClient->getObject($bucket, $object, $options); } catch (OssException $e) { print $e->getMessage(); } ``` 其,`parse_url` 函数可以将URL拆分为不同的部分,从而获取 `bucket` 和 `object`。`OssClient::OSS_HEADERS` 选项可以设置下载文件文件名。 完成以上步骤后,你就可以根据OSS完整图片路径下载图片并修改文件名了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值