Azure Storage 云存储使用
Azure About 3,658 words注意
普通上传:最大4000MB
分片上传:一块Blob
中:未提交的Block
最多100000
片,已提交的Block
最多50000
片,Blob
最大为:大约190.7TiB
(4000 MiB
x 50000
片)
构建认证信息
public StorageSharedKeyCredential getCredential(String accountName, String accountKey) {
return new StorageSharedKeyCredential(accountName, accountKey);
}
构建直接上传客户端
public BlobClient getBlobClient(String endpoint, String containerName, String blobName, String accountName, String accountKey) {
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
return new BlobClientBuilder()
.endpoint(endpoint)
.containerName(containerName)
.blobName(blobName)
.credential(credential)
.buildClient();
}
直接上传
public void uploadFile(InputStream is) {
BlobClient client = getBlobClient(xxx);
client.upload(BinaryData.fromStream(is), true);
}
下载文件
public void downloadToFile(String blobName, String pathName) {
BlobClient client = getBlobClient(xxx);
client.downloadToFile(pathName, true);
}
签名(防盗链)
public String signUrl(String objectName, String process, Duration expireTime) {
BlobClient client = getBlobClient(xxx);
OffsetDateTime expiryTime = OffsetDateTime.now().plus(expireTime);
BlobContainerSasPermission permission = new BlobContainerSasPermission().setReadPermission(true);
BlobServiceSasSignatureValues blobServiceSasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, permission);
return client.getBlobUrl() + "?" + client.generateSas(blobServiceSasSignatureValues);
}
分片上传
构建分片上传客户端
public BlockBlobClient getBlockBlobClient(String endpoint, String containerName, String blobName, String accountName, String accountKey) {
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
return new SpecializedBlobClientBuilder()
.endpoint(endpoint)
.containerName(containerName)
.blobName(blobName)
.credential(credential)
.buildBlockBlobClient();
}
上传分片
public void uploadPart(int partNumber, String blobName, InputStream is) {
try {
BlockBlobClient blockBlobClient = getBlockBlobClient(xxx);
String md5 = DigestUtils.md5DigestAsHex(String.valueOf(partNumber).getBytes());
String blockId = Base64.getEncoder().encodeToString(md5.getBytes());
BinaryData data = BinaryData.fromBytes(is.readAllBytes());
blockBlobClient.stageBlock(blockId, data);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
合并分片
public void completeMultipartUpload(String blobName) {
BlockBlobClient blockBlobClient = getBlockBlobClient(xxx);
BlockList blockList = blockBlobClient.listBlocks(BlockListType.UNCOMMITTED);
List<Block> uncommittedBlocks = blockList.getUncommittedBlocks();
if (CollectionUtils.isEmpty(uncommittedBlocks)) {
throw new RuntimeException("empty uncommitted blocks");
}
List<String> blockIds = new ArrayList<>();
for (int i = 1; i <= uncommittedBlocks.size(); i++) {
String md5 = DigestUtils.md5DigestAsHex(String.valueOf(i).getBytes());
String blockId = Base64.getEncoder().encodeToString(md5.getBytes());
blockIds.add(blockId);
}
blockBlobClient.commitBlockList(blockIds, true);
}
终止上传
public void abortMultipartUpload(String blobName) {
BlockBlobClient blockBlobClient = getBlockBlobClient(xxx);
boolean result = blockBlobClient.deleteIfExists();
log.info("abort multipart upload, delete if exists#{}", result);
}
HTTP 文档
https://learn.microsoft.com/en-us/rest/api/storageservices
Java 文档
https://learn.microsoft.com/en-us/java/api/overview/azure/storage
Views: 960 · Posted: 2023-03-30
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...