主题
OSS 高级功能指南
签名 URL
获取临时访问 URL
java
public String getTemporaryUrl(String objectName, long expireMinutes) {
long expirationMillis = expireMinutes * 60 * 1000;
URL url = ossService.securityUrl(objectName, expirationMillis);
return url.toString();
}指定 HTTP 方法
java
import com.aliyun.oss.HttpMethod;
public String getPutUrl(String objectName, long expirationMillis) {
URL url = ossService.securityUrl(objectName, expirationMillis, HttpMethod.PUT);
return url.toString();
}分片上传
适用于大文件上传场景。
java
@Service
public class MultipartUploadService {
@Autowired
private IObjectStorageService ossService;
public ObjectStorageResponse multipartUpload(String objectName, byte[] fileBytes, long partSize) {
// 1. 初始化分片上传
String uploadId = ossService.getUploadId(objectName);
// 2. 计算分片数量
int partCount = (int) Math.ceil((double) fileBytes.length / partSize);
List<UploadPart> partList = new ArrayList<>();
// 3. 逐个上传分片
for (int i = 0; i < partCount; i++) {
int partNumber = i + 1; // 分片号从 1 开始
long offset = i * partSize;
long currPartSize = Math.min(partSize, fileBytes.length - offset);
byte[] partData = Arrays.copyOfRange(fileBytes, (int) offset, (int) (offset + currPartSize));
UploadPart uploadPart = ossService.uploadPart(objectName, uploadId, partNumber, offset, currPartSize, partData);
partList.add(uploadPart);
}
// 4. 完成分片上传
return ossService.completeMultipartUpload(objectName, uploadId, partList);
}
}断点续传
java
public ObjectStorageResponse resumeUpload(String objectName, String localFilePath) {
int taskNum = 4; // 并发线程数
long partSize = 10 * 1024 * 1024L; // 分片大小:10MB
return ossService.resumeUpload(objectName, localFilePath, taskNum, partSize);
}设置访问权限
java
import com.aliyun.oss.model.CannedAccessControlList;
// 公共读
public ObjectStorageResponse uploadPublic(String objectName, byte[] bytes) {
return ossService.upload(objectName, bytes, CannedAccessControlList.PublicRead);
}
// 私有
public ObjectStorageResponse uploadPrivate(String objectName, byte[] bytes) {
return ossService.upload(objectName, bytes, CannedAccessControlList.Private);
}分片上传方法速查
java
// 分片上传
getUploadId(String objectName)
uploadPart(String objectName, String uploadId, int partNumber, long offset, long currPartSize, byte[] bytes)
completeMultipartUpload(String objectName, String uploadId, List<UploadPart> partEtags)
// 断点续传
resumeUpload(String objectName, String localFile, int taskNum, long partSize)注意事项
- 分片上传时,
partNumber从 1 开始,最大支持 10000 个分片 - 断点续传的
partSize范围:100KB ~ 5GB
