String accessKey = "****************";
String secretKey = "****************";
String region = "****************";
//桶名称
String bucketName = "****************";
//文件地址
String objectKey = "****************";
try {
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration config = new ClientConfiguration();
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
if (proxyHost != null && proxyPort != null) {
config.setProxyHost(proxyHost);
config.setProxyPort(Integer.valueOf(proxyPort));
AmazonS3 s3 = new AmazonS3Client(credentials, config);
// s3.setRegion(com.amazonaws.regions.Region.getRegion(Regions.CN_NORTH_1));
s3.setRegion(com.amazonaws.regions.Region.getRegion(Regions.fromName(region)));
// 设置过期时间为1小时
java.util.Date expiration = new java.util.Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);
//生成预签名URL
System.out.println("生成预签名URL");
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(bucketName, objectKey)
.withMethod(HttpMethod.GET)
.withExpiration(expiration);
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
System.out.println("生成的签名的URL: " + url.toString());
catch(AmazonServiceException e) {
//调用成功传输,但Amazon S3无法处理
//它返回了一个错误响应。
e.printStackTrace();
catch(SdkClientException e) {
//无法联系到Amazon S3以获得响应或客户端
//无法解析来自Amazon S3的响应。
e.printStackTrace();
1、
预
签名
url
当需要将
s3
资源提供给其他用户访问,但又不想直接通过桶的访问权限,可以通过
生成
预
签名
url
方式
生成
一个临时
url
提供给用户访问。
生成
预
签名
url
时,可以通过指定过期时间参数,限制用户访问时间。由于SigV4
签名
密钥最大有效期为7天,故
生成
的
预
签名
url
有效期最大也只有7天。
2、
签名
版本
Amazon
S3
有两个
签名
版本SigV2和SigV4版本,考虑到安全性和使用效率等因素,目前官方已停止SigV2版本的支持。
可以通过
预
签名
url
判断
签名
版本,通常SigV2
预
签名
url
带有
Amazon
Simple Storage
Service
(
S3
),简单存储服务,是一个公开的云存储服务。Web应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。
S3
提供一个RESTful API以编程方式实现与该服务的交互。目前市面上主流的存储厂商都支持
S3
协议接口。本文借鉴https://www.cnblogs.
com
/jsonq/p/18186340大佬的文章及代码修改而来。项目采用前后端分离模式:
前端:vue3 + element-plus + axios + spark-md5
项目里有图片上传的需求,具体实现是后端
生成
presigned
url
(
预
签名
url
,里面包含上传到
AWS
S3
所需要的一些认证标识信息)给到前端,前端通过这个
URL
将文件上传到云服务上。但是上传成功后,从CDN上
下载
下来的文件打不开,而且只有前端有这个问题,客户端可以正常上传,一开始以为是框架问题,而且亚马逊官方也没有直接上传相关的文档(都是使用SDK的方式上传),所以问题很难定位,后来在github上找到了方案。
从后端获取presigned
url
,亚马逊官网有
Java
、PH..
AWS
S3
-
java
-2.0
生成
预
签名
URL
下载
文件
记一次使用
AWS
Java
Sdk2.0
生成
对象
的
预
签名
的坑
最近项目需要使用
aws
的
S3
协议接入
对象
存储,但目前的
对象
存储兼容
aws
的
Java
sdk2.0效果更好,所以就选择2.0的版本;但在实际使用过程中发现很多和1.11.x有很大的区别,真的是头大;
1.11.X于2.X区别
详细区别见:https://github.
com
/
aws
/
aws
-sdk-
java
-v2/blob/master/docs/LaunchChangelog.md
参考书目及文档:
1.《
AWS
IN ACTION》----Andress Witting,Michael Witting
2.
aws
官方文档:https://docs.
aws
.
amazon
.
com
/index.html
1.注册
aws
账号
2.与
aws
交互的四种方式
3.相关资源及名词解释
4.搭建一个WordPress站点
5.搭建包含服务器和网络的虚拟基础设施
6.在云上保存数据
7.在A...
1 存储过程
创建用于存储数据元的桶,可以选择数据元所驻留的地区(目前来说,选择东京、新加坡会快些,美国本土更便宜),上传数据元到桶,进行持久化存储。另外,可以对上传的数据元及桶进行访问控制、加密等设置。每个
AWS
账户可以创建多个用户,用户可以对所拥有的数据进行上述权限控制。
目前可存储的你内容有:
(1)多媒体、音乐、图片
(2)视频监控文件
@GetMapping("/uploadFile")
public Object generatePreSigned
Url
AndUploadObject(String fileName){
Map<St.
import
com
.aliyun.oss.*;
import
com
.aliyun.oss.model.GeneratePresigned
Url
Request;
import
com
.aliyun.oss.model.PutObjectRequest;
import org.apache.
com
mons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframe.