[英]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.