生成预签名URL
优质
小牛编辑
136浏览
2023-12-01
如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。
生成一个预签名的URL
如下代码:
String bucketName = "your-bucket-name"; String key = "your-object-key"; // 设置URL过期时间为1小时 Date expiration = new Date(new Date().getTime() + 3600 * 1000); // 生成URL URL url = client.generatePresignedUrl(bucketName, key, expiration);
生成的URL默认以GET方式访问,这样,用户可以直接通过浏览器访问相关内容。
生成其他Http方法的URL
如果你想允许用户临时进行其他操作(比如上传,删除Object),可能需要签名其他方法的URL,如下:
// 生成PUT方法的URL URL url = client.generatePresignedUrl(bucketName, key, expiration, HttpMethod.PUT);
通过传入 HttpMethod.PUT 参数,用户可以使用生成的URL上传Object。
添加用户自定义参数(UserMetadata)
如果你想使用签名的URL上传Object,并指定UserMetadata等参数,可以这样做:
// 创建请求 GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key); // HttpMethod为PUT generatePresignedUrlRequest.setMethod(HttpMethod.PUT); // 添加UserMetadata generatePresignedUrlRequest.addUserMetadata("key", "value"); // 生成预签名的URL URL url = client.generatePresignedUrl(bucketName, key, expiration);
需要注意的是,上述过程只是生成了签名的URL,你仍需要在request header中添加UserMetadata的信息。
关于如何在Http请求中设置UserMetadata等参数,可以参考 OSS REST API 文档 中的相关内容。