目录

  • 解读
  • 使用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

官方文档

oss java sdk

举例

直接使用临时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 );

进入看看

oss读取文件每行内容java oss获取文件路径_java


发现里边有三个接口都可以获取URL,看到最后一个public URL generatePresignedUrl(GeneratePresignedUrlRequest request)是不是很熟悉,这里不就是可以创建一个urlRequest。

看看传入的参数GeneratePresignedUrlRequest 是什么:

oss读取文件每行内容java oss获取文件路径_重命名_02


惊喜的发现这里边这个ResponseHeaderOverrides对象可以覆盖response headers.

进入到这个类里边,找到了这个setContentDisposition()方法,这个正是我需要的。

oss读取文件每行内容java oss获取文件路径_oss读取文件每行内容java_03


这下就明了。

我需要new 一个 GeneratePresignedUrlRequest,并将覆盖请求头的属性ResponseHeaderOverrides给set进去。并调用ossClient的generatePresignedUrl(GeneratePresignedUrlRequest)返回url即可

oss读取文件每行内容java oss获取文件路径_java_04

举例

// 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

oss读取文件每行内容java oss获取文件路径_oss读取文件每行内容java_05


本篇文档到这里就结束了,有兴趣的朋友可以一起交流一下。