Skip to content

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)

注意事项

  1. 分片上传时,partNumber1 开始,最大支持 10000 个分片
  2. 断点续传的 partSize 范围:100KB ~ 5GB

Power By 数字海南