OSS将为上传至Bucket中的每个Object保留如下HTTP标准属性。
名称 | 描述 |
---|---|
Content-Type | 指定Object的文件类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定文件类型,则根据文件的扩展名生成。如果文件没有扩展名,则文件类型的默认值application/octet-stream 。Content-Type的常见设置请参见如何设置Content-Type(MIME)?。 |
Content-Encoding | 声明Object的编码方式。您需要按照Object 的实际编码类型填写,否则可能造成客户端(浏览器)解析编码失败或Object下载失败。若Object未编码,请置空此项。取值如下:
关于Content-Encoding的更多信息,请参见RFC2616。 重要 如果您希望访问OSS内常见网页静态文件(HTML、Javascript、XML、json)时进行Gzip压缩,您需要置空此项,并在请求中增加 |
Content-Language | 声明Object内容使用的语言。例如某个Object使用简体中文编写,则此项可设置为zh-CN。 |
Content-Disposition | 指定Object的展示形式。取值如下:
将Object下载到浏览器指定路径时: 说明
通过文件URL访问文件时是预览还是以附件形式下载,与文件所在Bucket的创建时间、OSS开通时间以及使用的域名类型有关。更多信息,请参见通过文件URL访问文件无法预览而是以附件形式下载?。 |
Cache-Control | 指定Object的缓存行为。取值如下:
|
Expires | 缓存内容的绝对过期时间,格式是格林威治时间(GMT)。例如2022-10-12T00:00:00.000Z 。如果Cache-Control设置了max-age=<seconds> ,以max-age=<seconds> 为准。 |
Last-Modified | Object的最后修改时间。 |
Content-Length | Object的大小,单位为字节。 |
那么我们知道只要根据这个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 - 阿里云