微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想将一个文件从 s3(4.5GB 大小)作为单个文件传输到 Azure blob 存储。 由于它是一个巨大的文件,我们试图将该 s3 文件分成多个块大小为 5MB 的块。每个块都上传到 azure blob 存储,最后我想将所有块重新组合成 azure 中的单个 blob 文件(或)我上传到 azure blob 存储的每个块都应将其附加到现有的块中。

如果我们对此有任何解决方案,请尽快帮助我?

解决方法

Azure Storage 支持通过 Block Blobs 分块上传。您可以“暂存”数据块,然后在完成所有数据块的上传后,您可以将暂存的数据块“提交”到单个 blob。

新的 azure-storage-blob Java SDK 提供 BlockBlobClient(和 BlockBlobAsyncClient),其中包含用于暂存和提交块的 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。