java - 如何使用 java sdk 在 Azure Blob 存储中上传单个视频文件的多个 block ?

标签 java azure azure-blob-storage azure-java-sdk

我想将一个大文件从 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。

使用SpecializedBlobClientBuildercreate 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/

相关文章:

java - Selenium 中的 headless Chrome 检索空页面(尽管没有 headless 标志也可以工作)

java - maven-osgi 项目中的 EventAdmin 为空

azure - 使用托管标识从 Azure 逻辑应用程序向 Azure Function 进行身份验证

java - 使用 HTTP 协议(protocol)通过 TCP 套接字获取图像

.net - 云上的非 ASP.NET

azure - 如何使用 Azure 数据工厂展平嵌套 JSON 结构

Azure Blob 到 Azure SQL 数据库 - 数据工厂

azure - 有没有办法使用逻辑应用创建新的 blob 作为文件夹?

使用 ARM 的 Azure Blob 存储容器存储访问策略

java - Android 中仅客户端套接字编程