【问题标题】:How to get blob Uri using azure Java Storage SDK V10如何使用 azure Java Storage SDK V10 获取 blob Uri
【发布时间】:2019-04-25 17:27:07
【问题描述】:

我尝试关注 azure storage Samples 并且能够上传 blob。我正在尝试获取已上传 blob 的 Uri,但无法获取 Uri。

在之前的 SDK v7 中,我可以做 blobItem.getUri(),但在新版本中找不到。我尝试了以下方法,但是元数据没有 Uri,它实际上是属性。我如何获得 Uri

    blobURL.upload(Flowable.just(ByteBuffer.wrap(image)), image.length, headers, mData, null, null)
    .flatMap(bulkBlockBlobUploadResponse -> {
        this.getContext().getLogger().info(bulkBlockBlobUploadResponse.headers().eTag());
        return Single.just(true);
    })
    .flatMap(response ->
        // Query the blob's properties and metadata.
        this.getBlockBlobURL().getProperties(null, null))
    .flatMap(blobGetPropertiesResponse -> { 
        this.getContext().getLogger().info(blobGetPropertiesResponse.headers().metadata().toString());
        return Single.just(true);
    })

【问题讨论】:

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


    【解决方案1】:

    回答有点晚,但在 BlockBlobURL 对象上你有一个 toURL() 方法。 因此,要获取 URI,您只需:

    BlockBlobURL my_blob = ... // your call to obtain the BlockBlobURL
    URI blob_uri = blob.toURL().toURI();
    

    【讨论】:

      【解决方案2】:

      这可能是sdk版本不同造成的,有样例供参考。

      static void getBlob(BlockBlobURL blobURL, File sourceFile) {
          try {
              // Get the blob using the low-level download method in BlockBlobURL type
              // com.microsoft.rest.v2.util.FlowableUtil is a static class that contains helpers to work with Flowable
              blobURL.download(new BlobRange(0, Long.MAX_VALUE), null, false)
              .flatMapCompletable(response -> {
                  AsynchronousFileChannel channel = AsynchronousFileChannel.open(Paths
                      .get(sourceFile.getPath()), StandardOpenOption.CREATE,  StandardOpenOption.WRITE);
                          return FlowableUtil.writeFile(response.body(), channel);
              }).doOnComplete(()-> System.out.println("The blob was downloaded to " + sourceFile.getAbsolutePath()))
              // To call it synchronously add .blockingAwait()
              .subscribe();
          } catch (Exception ex){
          System.out.println(ex.toString());
          }
      }
      

      您可以点击这个link详细查看,希望对您有所帮助。

      【讨论】:

      • 感谢@Steven,您的示例展示了如何将 blob 下载到本地,而我正在寻找上传的 blob 的 Uri。我看了一下blobUrl toURL() 提供了blockBlob的url,这对我有帮助
      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2017-03-17
      • 2019-10-01
      • 2017-10-17
      • 1970-01-01
      • 2019-05-31
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多