Ali OSS 云存储使用
OSS 大约 5241 字注意
OSS
的Java
的sdk 3.13.2
中的分片上传合并接口completeMultipartUpload
,构建CompleteMultipartUploadRequest
对象时partETags
参数不能为空,否则会抛出空指针异常。
解决方法:升级到3.15.2
版本。
Object
命名规则:使用UTF-8
编码,长度必须在1~1023
字符之间,不能以正斜线(/
)或者反斜线(\
)字符开头。
普通上传:最大5G
,简单上传默认会覆盖同名Object
。
分片上传:最小分片100K
,最多10000
个分片。
构建 OSS 客户端
使用域名构建:
public OSS getOssClient(String endpoint, String accessKeyId, String accessKeySecret) {
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
使用STSAssumeRole
构建:
public OSS getOssClientUseSTS(String region, String accessKeyId, String accessKeySecret, String roleArn) {
try {
STSAssumeRoleSessionCredentialsProvider provider = CredentialsProviderFactory.newSTSAssumeRoleSessionCredentialsProvider(
regionId, accessKeyId(), accessKeySecret(), roleArn);
return new OSSClientBuilder().build(bucketStoreConfig.getEndpoint(), provider);
} catch (ClientException e) {
log.error("build oss client exception#{}", e.getMessage(), e);
throw new RuntimeException(e);
}
}
文档:https://help.aliyun.com/document_detail/32010.html
直接上传
public String uploadFile(String bucketName, String objectName, InputStream is) {
OSS ossClient = null;
try {
ossClient = getOssClient();
ossClient.putObject(bucketName, objectName, is);
return objectName;
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
下载文件
public void downloadToFile(String bucketName, String objectName, String pathName) {
OSS ossClient = null;
try {
ossClient = getOssClient();
GetObjectRequest req = new GetObjectRequest(bucketName, objectName);
ossClient.getObject(req, new File(pathName));
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
分片上传
初始化
public String initMultipartUpload(String bucketName, String objectName) {
OSS ossClient = null;
try {
ossClient = getOssClient();
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
InitiateMultipartUploadResult result = ossClient.initiateMultipartUpload(request);
return result.getUploadId();
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
上传分片
public void uploadPart(int partNumber, String bucketName, String objectName, InputStream is, String uploadId) {
OSS ossClient = null;
try {
ossClient = getOssClient();
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
uploadPartRequest.setInputStream(is);
uploadPartRequest.setPartNumber(partNumber);
ossClient.uploadPart(uploadPartRequest);
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
合并分片
public void completeMultipartUpload(String bucketName, String objectName, String uploadId) {
OSS ossClient = null;
try {
ossClient = getOssClient();
CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, null);
Map<String, String> headers = new HashMap<>();
headers.put("x-oss-complete-all", "yes");
completeMultipartUploadRequest.setHeaders(headers);
ossClient.completeMultipartUpload(completeMultipartUploadRequest);
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
终止上传
public void abortMultipartUpload(String bucketName, String objectName, String uploadId) {
OSS ossClient = null;
try {
ossClient = getOssClient();
AbortMultipartUploadRequest abortMultipartUploadRequest = new AbortMultipartUploadRequest(bucketName, objectName, uploadId);
ossClient.abortMultipartUpload(abortMultipartUploadRequest);
} catch (Exception e) {
throw e;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
签名(防盗链)
public String signUrl(String bucketName, String objectName, String process, Integer expires) {
OSS ossClient = null;
try {
ossClient = getOssClient();
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
if (StringUtils.hasText(process)) {
req.setProcess(process);
}
Duration expireTime = Duration.ofSeconds(expires);
LocalDateTime expire = LocalDateTime.now().plus(expireTime);
Date expireDate = Date.from(expire.atZone(ZoneId.systemDefault()).toInstant());
req.setExpiration(expireDate);
URL url = ossClient.generatePresignedUrl(req);
return url.toString();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
文档
阅读 137 · 发布于 2023-04-04
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Redis 监控 monitor阅读 1801
-
Spring Boot 不引入模板引擎加载网页等资源阅读 1476
-
Redis 执行 Lua 脚本抛出 StatusOutput does not support set(long) 异常阅读 7918
-
k3s Helm Error INSTALLATION FAILED Kubernetes cluster unreachable阅读 2876
-
trivy 跳过更新数据库执行漏洞扫描阅读 1437
-
JavaFX TextArea 按 Enter 键发送阅读 1485
-
Docker 部署 Elasticsearch阅读 789
-
Android 小米,魅族 6.0 状态栏不能反色解决方法阅读 3247
-
Java 中的 ThreadLocal阅读 2029
-
Git 提示 You asked me to pull without telling me which branch you...阅读 4664