【问题标题】:How to upload AppendBlob/a file larger than the 4mb limit into Azure Storage/Blob in Java?如何将 AppendBlob/大于 4mb 限制的文件上传到 Java 中的 Azure 存储/Blob?
【发布时间】:2021-12-12 14:27:17
【问题描述】:

如何使用 Azure Storage Blob client library for Java 将大 (>4mb) 文件作为 AppendBlob 上传?

我已经成功实现了大文件的 BlockBlob 上传,并且似乎该库在内部处理了单个请求的 4mb(?) 限制并将文件分块为多个请求。

但似乎该库无法为 AppendBlob 做同样的事情,那么如何手动完成这种分块呢?基本上我认为这需要将 InputStream 分块成更小的批次......

使用 Azure Java SDK 12.14.1

【问题讨论】:

    标签: java azure append azure-blob-storage azure-storage


    【解决方案1】:

    受以下 SO 中答案的启发(与在 C# 中执行此操作相关): c-sharp-azure-appendblob-appendblock-adding-a-file-larger-than-the-4mb-limit

    ...我最终在 Java 中这样做了:

        AppendBlobRequestConditions appendBlobRequestConditions = new AppendBlobRequestConditions()
                .setLeaseId("myLeaseId");
        
        try (InputStream input = new BufferedInputStream(
                new FileInputStream(file));) {
            byte[] buf = new byte[AppendBlobClient.MAX_APPEND_BLOCK_BYTES];
            int bytesRead;
            while ((bytesRead = input.read(buf)) > 0) {
                if (bytesRead != buf.length) {
                    byte[] smallerData = new byte[bytesRead];
                    smallerData = Arrays.copyOf(buf, bytesRead);
                    buf = smallerData;
                }
                try (InputStream byteStream = new ByteArrayInputStream(buf);) {
                    appendBlobClient
                            .appendBlockWithResponse(byteStream, bytesRead,
                                    null, appendBlobRequestConditions, null,
                                    null);
                }
            }
        }
    

    当然,在此之前您需要做很多事情,例如确保 AppendBlob 存在,如果不存在,则在尝试附加任何数据之前创建它。

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2018-11-17
      • 1970-01-01
      • 2016-08-18
      • 2021-12-18
      • 2019-08-13
      • 2020-09-23
      • 2015-06-16
      相关资源
      最近更新 更多