日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用jclouds库在Amazon S3上上传

發布時間:2023/12/3 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用jclouds库在Amazon S3上上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Java世界中,有幾種將內容上載到S3存儲桶的好方法–在本文中,我們將研究jclouds庫為此提供的功能。 要使用jclouds –特別是本文中討論的API,應將這種簡單的Maven依賴項添加到項目的pom中:

<dependency><groupId>org.jclouds</groupId><artifactId>jclouds-allblobstore</artifactId><version>1.5.9</version> </dependency>

1.上傳到Amazon S3

為了訪問這些API中的任何一個,第一步是創建一個BlobStoreContext :

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(BlobStoreContext.class);

這表示常規鍵值存儲服務(例如Amazon S3)的入口點,但不僅限于此。 對于僅用于S3的更具體的實現,可以類似地創建上下文:

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(S3BlobStoreContext.class);

更具體地說:

BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);

當不再需要經過身份驗證的上下文時,需要關閉它以釋放與其關聯的所有資源(線程和連接)。

2. jclouds的四個S3 API

jclouds庫提供了四種不同的API來將內容上傳到S3存儲桶,范圍從簡單但不靈活到復雜而功能強大,所有這些都是通過BlobStoreContext獲得的。 讓我們從最簡單的開始。

2.1。 通過Map API上傳

jclouds與S3存儲桶進行交互的最簡單方法是將該存儲桶表示為Map。 該API是從上下文中獲取的:

InputStreamMap bucket = context.createInputStreamMap('bucketName');

然后,上傳一個簡單HTML文件:

bucket.putString('index1.html', '<html><body>hello world1</body></html>');

InputStreamMap API公開了其他幾種PUT操作-文件和原始字節-單個和批量。 可以使用一個簡單的集成測試作為示例:

@Test public void whenFileIsUploadedToS3WithMapApi_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);InputStreamMap bucket = context.createInputStreamMap('bucketName');bucket.putString('index1.html', '<html><body>hello world1</body></html>');context.close(); }

2.2。 通過BlobMap上傳

使用簡單的Map API很簡單,但最終會受到限制-例如,無法傳遞有關要上傳內容的元數據。 當需要更大的靈活性和定制功能時,這種通過Map將數據上傳到S3的簡化方法就不再足夠了。 我們將要看的下一個API是Blob Map API,它是從上下文中獲得的:

BlobMap bucket = context.createBlobMap('bucketName');

該API允許客戶端訪問更多較低級別的詳細信息,例如Content – Length , Content-Type , Content-Encoding , eTag哈希等。 在存儲桶中上傳新內容:

Blob blob = bucket.blobBuilder().name('index2.html').payload('<html><body>hello world2</body></html>').contentType('text/html').calculateMD5().build();

該API還允許在創建請求上設置各種有效負載。 一個簡單的集成測試,用于通過Blob Map API將基本HTML文件上傳到S3:

@Test public void whenFileIsUploadedToS3WithBlobMap_thenNoExceptions() throws IOException {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobMap bucket = context.createBlobMap('bucketName');Blob blob = bucket.blobBuilder().name('index2.html').payload('<html><body>hello world2</body></html>').contentType('text/html').calculateMD5().build();bucket.put(blob.getMetadata().getName(), blob);context.close(); }

2.3。 通過BlobStore上傳

以前的API無法使用分段上傳來上傳內容-這使得它們不適用于處理大文件。 我們將要研究的下一個API(同步BlobStore API)解決了此限制。 這是從上下文中獲得的:

BlobStore blobStore = context.getBlobStore();

要使用多部分支持并將文件上傳到S3:

Blob blob = blobStore.blobBuilder('index3.html').payload('<html><body>hello world3</body></html>').contentType('text/html').build(); blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());

有效負載生成器與BlobMap API所使用的生成器相同,因此可以在此處指定有關blob的較低級元數據信息時具有相同的靈活性。 區別在于API的PUT操作支持的PutOptions –即多部分支持 。 現在,先前的集成測試已啟用多部分功能:

@Test public void whenFileIsUploadedToS3WithBlobStore_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobStore blobStore = context.getBlobStore();Blob blob = blobStore.blobBuilder('index3.html').payload('<html><body>hello world3</body></html>').contentType('text/html').build();blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());context.close(); }

2.4。 通過AsyncBlobStore上傳

雖然以前的BlobStore API是同步的,但還有一個針對BlobStore 的異步API – AsyncBlobStore 。 該API同樣是從上下文中獲得的:

AsyncBlobStore blobStore = context.getAsyncBlobStore();

兩者之間的唯一區別是異步API為PUT異步操作返回了ListenableFuture :

Blob blob = blobStore.blobBuilder('index4.html')..payload('<html><body>hello world4</body></html>').build(); blobStore.putBlob('bucketName', blob)<strong>.get()</strong>;

顯示此操作的集成測試類似于同步操作:

@Test public void whenFileIsUploadedToS3WithBlobStore_thenNoExceptions() {BlobStoreContext context =ContextBuilder.newBuilder('aws-s3').credentials(identity, credentials).buildView(AWSS3BlobStoreContext.class);BlobStore blobStore = context.getBlobStore();Blob blob = blobStore.blobBuilder('index4.html').payload('<html><body>hello world4</body></html>').contentType('text/html').build();Future<String> putOp = blobStore.putBlob('bucketName', blob, PutOptions.Builder.multipart());putOp.get();context.close(); }

3.結論

在本文中,我們分析了jclouds庫提供的用于將內容上傳到Amazon S3的四個API 。 這四個API是通用的 ,它們還可以與其他鍵值存儲服務(例如Microsoft Azure Storage)一起使用。 在下一篇文章中,我們將研究jclouds中可用的特定于Amazon的S3 API – AWSS3Client 。 我們將執行上傳大文件的操作,動態地計算任何給定文件的最佳零件數,并并行執行所有零件的上傳。

參考:在ba3d博客上,從JCG合作伙伴 Eugen Paraschiv 使用jclouds庫在S3上載 。

翻譯自: https://www.javacodegeeks.com/2013/04/upload-on-amazon-s3-with-the-jclouds-library.html

總結

以上是生活随笔為你收集整理的使用jclouds库在Amazon S3上上传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。