有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用azure Java存储SDK V10获取blob Uri

我试着跟踪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);
    })

共 (2) 个答案

  1. # 1 楼答案

    这可能是由于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来详细查看,希望对你有所帮助

  2. # 2 楼答案

    稍晚回答,但在BlockBlobURL对象上,您有一个toURL()方法。 因此,要获取URI,您只需执行以下操作:

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