我想将一个大文件从 s3(大小为 4.5GB)作为单个文件传输到 Azure blob 存储。 由于它是一个巨大的文件,我们尝试将该 s3 文件分成 block 大小为 5MB 的多个 block 。每个 block 都上传到 azure blob 存储,最后我想将所有 block 重新组装成 azure 中的单个 blob 文件(或者)我上传到 azure blob 存储的每个 block 都应将其附加到现有 block 。
如果我们有任何解决方案,请尽快帮助我?
最佳答案
Azure 存储支持通过 Block Blobs 分块上传。您可以“暂存”数据 block ,然后在上传完所有数据 block 后,可以将暂存的数据 block “提交”到单个 blob。
新的azure-storage-blob Java SDK 提供了 BlockBlobClient
(和 BlockBlobAsyncClient
),它具有用于暂存和提交 block 的 API。
使用SpecializedBlobClientBuilder至create an instance of BlockBlobClient .
这是一个示例:
BlockBlobClient blockBlobClient = new SpecializedBlobClientBuilder()
.connectionString("<your-connection-string>")
.containerName("<your-container-name>")
.blobName("<your-blob-name>")
.buildBlockBlobClient();
String chunkId1 = Base64.getEncoder().encodeToString("1".getBytes());
String chunkId2 = Base64.getEncoder().encodeToString("2".getBytes());
String chunkId3 = Base64.getEncoder().encodeToString("3".getBytes());
byte[] chunk1Bytes = " chunk 1.".getBytes();
byte[] chunk2Bytes = " chunk 2.".getBytes();
byte[] chunk3Bytes = " chunk 3.".getBytes();
ByteArrayInputStream chunk1 = new ByteArrayInputStream(chunk1Bytes);
ByteArrayInputStream chunk2 = new ByteArrayInputStream(chunk2Bytes);
ByteArrayInputStream chunk3 = new ByteArrayInputStream(chunk3Bytes);
// Stage 3 blocks
blockBlobClient.stageBlock(chunkId1, chunk1, chunk1Bytes.length);
blockBlobClient.stageBlock(chunkId2, chunk2, chunk2Bytes.length);
blockBlobClient.stageBlock(chunkId3, chunk3, chunk3Bytes.length);
// Commit all 3 blocks - order of chunkIds matter
BlockBlobItem blockBlobItem = blockBlobClient.commitBlockList(Arrays.asList(chunkId1, chunkId2, chunkId3));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
blockBlobClient.download(outputStream);
System.out.println(new String(outputStream.toByteArray())); // prints chunk 1. chunk 2. chunk3
关于java - 如何使用 java sdk 在 Azure Blob 存储中上传单个视频文件的多个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66364156/