目录
- 解读
- 使用sdk版本
- 1.使用临时URL访问OSS,并获取临时URL
- 官方文档
- 举例
- 2.使用临时URL访问OSS,并对临时URL下载的文件重命名
- 分析
- 举例
解读
如何使用临时授权的url访问云对象地址,又如何通过该URL下载自定义的文件名。
下面是两个内容点:
1.直接获取临时url,这个跟官方的差不多,基本上照搬即可。
2.获取临时url,并且可以对下载文件重命名。
使用sdk版本
java SDK版本 3.5.0
1.使用临时URL访问OSS,并获取临时URL
官方文档
举例
直接使用临时URL访问,这里可以参看文档中的java授权访问。写的很详细了。
// objectName: 上传路径 (不能包含Bucket名称)
public String getDownloadUrl(String objectName) {
// 设置签名URL过期时间,单位为毫秒。
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
// 填写Bucket名称,例如examplebucket。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration );
return url.toString();
}
2.使用临时URL访问OSS,并对临时URL下载的文件重命名
分析
1.在获取临时的url里边有这么一行代码
ossClient.generatePresignedUrl(bucketName, objectName, expiration );
进入看看
发现里边有三个接口都可以获取URL,看到最后一个public URL generatePresignedUrl(GeneratePresignedUrlRequest request)是不是很熟悉,这里不就是可以创建一个urlRequest。
看看传入的参数GeneratePresignedUrlRequest 是什么:
惊喜的发现这里边这个ResponseHeaderOverrides对象可以覆盖response headers.
进入到这个类里边,找到了这个setContentDisposition()方法,这个正是我需要的。
这下就明了。
我需要new 一个 GeneratePresignedUrlRequest,并将覆盖请求头的属性ResponseHeaderOverrides给set进去。并调用ossClient的generatePresignedUrl(GeneratePresignedUrlRequest)返回url即可
举例
// objectName: 上传路径 (不能包含Bucket名称)
// fileName :重命名的文件(eg: rename.txt)
protected String getDownloadUrl(String objectName, String fileName) {
// 设置签名URL过期时间,单位为毫秒。
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
// 填写Bucket名称,例如examplebucket。
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName);
//设置过期时间
request.setExpiration(expiration );
//方法一: 直接覆盖请求头
ResponseHeaderOverrides Headers=new ResponseHeaderOverrides();
Headers.setContentDisposition(String.format("attachment;filename=%s", fileName));
request.setResponseHeaders(Headers);
//方法二: 设置setQueryParameter();其实方法一源码也是这样设置的
// Map<String, String> queryParams = new HashMap<>(8);
// queryParams.put("response-content-disposition", String.format("attachment;filename=%s", fileName));
// request.setQueryParameter(queryParams);
URL url = ossClient.generatePresignedUrl(request);
return url.toString();
}
注: 第二种方法相当于里边源码写的,直接设置Parameters
本篇文档到这里就结束了,有兴趣的朋友可以一起交流一下。