簡體   English   中英

如何將 Flux java object 上傳到 Azure Blob 存儲?

[英]How to upload a Flux java object into Azure Blob Storage?

我正在嘗試將 Flux object 上傳到 azure blob 存儲中,但我不確定如何使用 BlobAsyncClient 發送 Flux pojo。 BlobAsyncClient 具有采用 Flux 或 BinaryData 的上傳方法,但我沒有運氣嘗試將 CombinedResponse 轉換為 BYteBuffer 或 BinaryData。 有沒有人有任何建議或知道如何將通量 object 上傳到 blob 存儲?

您將需要一個異步 blob 容器客戶端:

@Bean("blobServiceClient")
BlobContainerAsyncClient blobServiceClient(ClientSecretCredential azureClientCredentials, String storageAccount, String containerName) {
    BlobServiceClientBuilder blobServiceClientBuilder = new BlobServiceClientBuilder();
    return blobServiceClientBuilder
            .endpoint(format("https://%s.blob.core.windows.net/", storageAccount))
            .credential(azureClientCredentials)
            .buildAsyncClient()
            .getBlobContainerAsyncClient(containerName);
}

在您的代碼中,您可以使用它來獲取客戶端,並將您的 Flux 保存到它:

Flux<ByteBuffer> content = getContent();
blobServiceClient.getBlobAsyncClient(id)
            .upload(content, new ParallelTransferOptions(), true);

我知道getContent()步驟是您正在努力解決的部分。 您可以保存BinaryData object 或Flux<ByteBuffer> stream。

要將 object 轉換為 BinaryData object,請使用 static 輔助方法:

BinaryData foo = BinaryData.fromObject(myObject);

BinaryData 顧名思義:二進制數據。 例如圖像文件的內容。

如果你想把它變成一個 ByteBuffer,記住你試圖在這里把一個 object 變成一個 stream 的數據。 您可能希望使用某種標准化的方式來執行此操作,以便可以可靠地反轉它,而不是 stream 的字節,如果您將數據加載到不同的客戶端,甚至只是相同的不同版本,則可能會中斷,我們通常保存object的json或xml表示。

我的首選工具是 Jackson:

byte[] myBytes = new ObjectMapper().writeValueAsBytes(myObject);

var myByteBuffer = ByteBuffer.wrap(myBytes);

並將其作為 Flux 返回:

Flux<ByteBuffer> myFlux = Flux.just(myByteBuffer);

順便說一下,Azure 在BinaryData.fromObject()方法中使用了 JSON 序列化程序。 來自 JavaDoc:

Creates an instance of BinaryData by serializing the Object using the default JsonSerializer.
Note: This method first looks for a JsonSerializerProvider 
implementation on the classpath. If no implementation is found, a 
default Jackson-based implementation will be used to serialize the object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM