当前位置: 首页 > 知识库问答 >
问题:

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

唐俊楚
2023-03-14

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

如果我们有什么解决办法,请尽快帮我?

共有1个答案

墨宜人
2023-03-14

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

新的azure storage blob Java SDK提供了BlockBlobClient(和BlockBlobBasyncClient),其中包含用于暂存和提交块的API。

使用SpecializedBlobClientBuilder创建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
 类似资料:
  • 问题内容: 这是我上传多个文件的代码: HTML代码: 密码: 但是它会上传单个文件,而不是多个文件。 问题答案: 在模板中,你需要在上传输入中添加属性: 然后在查看功能中,上传的文件可以通过列表获取。循环此列表并在每个项目上调用save()方法将它们保存在给定路径中: 此外,你可能需要使用secure_filename()来清洁文件名: 你也可以使用此方法生成随机文件名。 完整演示 视图: im

  • 我试图理解以下文档: Transferutility.UploadDirectory null null null

  • 但是如何为多个文件做呢? PS.在webflux中有没有另一种上传一组文件的方法?

  • 问题内容: 我正在尝试使用以下代码:- 我没有得到结果。 问题答案: 您可以使用AutoIT或JAVA代码。下面我将两者都用作您的参考。尝试任何一个 AutoIt中的代码是 希望这给你一个主意

  • 我正在尝试使用DropZone上载多个文件。但在控制器中检索文件名时出现问题。请帮我找出哪里出了错。我已经在下面发布了我的代码。 DropZone的HTML代码: 脚本文件,用于: 在控制器actionCreate()方法中: 当我在拖放框中添加图片并点击提交按钮时,拖放框中的图片显示成功结果。但是当我试着打印$模型的时候-

  • 我的程序询问用户的姓名和年龄。用户名是他们的姓名和年龄,最后加上一个随机字符。我想将该用户名存储到一个新的文本文件中,但是每当我运行代码时,它一次只写入一个用户名,它不包括我之前添加的用户名。这是我的代码请帮助我,我是新来的。