亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传

亚马逊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允许客户端访问更多较低级别的详细信息,例如ContentLengthContent-TypeContent-EncodingeTag哈希等。 在存储桶中上传新内容:

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 的异步APIAsyncBlobStore 。 该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 。 我们将实现上传大文件的操作,动态地计算任何给定文件的最佳零件数,并并行执行所有零件的上传。

参考:在j3s 库中,从JCG合作伙伴 Eugen Paraschiv 的jclouds库 上载到baeldung博客。

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

亚马逊s3的使用方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在PhotoShop中改像素m*n

快捷键&#xff1a;CtrlAlti&#xff0c;如图&#xff0c;改为28*28

Spring Boot Redis简介

1.概述 在本文中&#xff0c;我们将通过Spring Data Redis库回顾如何将Redis与Spring Boot结合使用的基础知识。 我们将构建一个应用程序&#xff0c;演示如何通过Web界面执行CRUD操作Redis 。 Github上提供了该项目的完整源代码。 2.什么是Redis&#xff1f; Redis是一个开源…

Dijkstra-解决最短路径问题

1、从A开始&#xff08;也可以从其他点&#xff0c;此处选择从A&#xff09; 将A 加入树&#xff0c;A被圈红 列出最短路径数组&#xff1a; 2、 确定从A到其他顶点的最短距离为50&#xff0c;A-->B 将B加入树&#xff1a; 更新最短路径数组&#xff1a; 比较到C的距离&a…

jackson使用_如何在Jackson中使用PropertyNamingStrategy

jackson使用Jackson api被广泛用于将json转换为Object并将Object转换为JSON。因此&#xff0c;如果您有json字符串并想在java对象中进行转换&#xff0c;请创建与json中的字段相同的bean的字段名。 Jackson在将json字段映射到java对象字段时遵循标准的bean约定&#xff0c;但是…

简单排序--冒泡排序

冒泡排序&#xff1a; public void sort(){int out,in;//out指向已经排好序的前一个for( outnElements-1;out>1;out--){for(in0;in<out;in){if(arr[in]>arr[in1]){swap(in,in1);//相邻的两个元素比较&#xff0c;交换}}}}//实现冒泡排序相邻的元素两两比较&#xff0c…

jca使用_使用JCA的密码学–提供者中的服务

jca使用Java密码体系结构&#xff08;JCA&#xff09;是一个可扩展的框架&#xff0c;使您能够使用执行加密操作。 JCA还促进实现独立性&#xff08;程序不应该在乎谁提供加密服务&#xff09;和实现互操作性&#xff08;程序不应该与特定加密服务的特定提供者联系在一起&#…

简单排序--选择排序

选择排序&#xff1a; public void sort(){int out,in,min;for(out0;out<nElements-1;out){min out;for(inout1;in<nElements;in)if(arr[in]<arr[min])min in;swap(out,min);//将min放在out位置&#xff0c;out始终指向最小值的下一个位置&#xff0c;即下一个min要…

Java 9模块服务

接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的&#xff0c;但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它&#xff0c;但是使用并不广泛。 它可以用于模块化应用程序&#xff08;甚至更多&#xff09;&#xff0c;并提供一种使用应用程…

简单排序--插入排序

插入排序&#xff1a; public void sort(){int in,out,temp;for(out1;out<nElements;out){temp arr[out];in out;while(in>0&&arr[in-1]>temp){arr[in] arr[in-1];//待插入的数据比其之前的数字大的右移&#xff0c;从小到大排序--in;//依次左移}arr[in] …

ejb 2.1 jboss_JBoss AS 8中的Java EE 7和EJB 3.2支持

ejb 2.1 jboss你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 。 除此以外&#xff0c;此版本的Java EE还引入了EJB规范的EJB 3.2版本。 与EJB 3.1规范相比&#xff0c;EJB 3.2具有一些新功能。 我在这里引用EJB 3.2规范中的文本&#xff0c;总结了新…

一些工厂实例

我时不时地发现自己摸索了一些旧的代码&#xff0c;以找到示例“我在哪里做过工厂一样的事情”。 上周再次发生这种情况时&#xff0c;我决定只查找所有示例&#xff0c;并创建一个示例项目和有关它的博客文章。 所以在这篇文章中&#xff0c;我&#xff1a; 从简单的“原始…

Android Studio Problems

p1、VT-x is disabled in BIOS 一般开机按F2进入BIOS界面&#xff0c;在configuration中将 Intel Virtulization Technology设置为Enabled p2、Genymotion显示DISCONNECTED&#xff0c;在Genymotion设置页面&#xff0c;将SDK路径改为Android Studio的SDK路径

eclipse工程导入Android Studio

在eclipse中选中要导出的工程&#xff08;此工程在eclipse中最好不要有错误&#xff09;&#xff0c;右键选择Export->Generate Gradle build files 在本地工程里生成了一个build.gradle文件。 在AS中选择 导入成功后会生成一个import-summary.txt 导入成功。

idea中drl文件_得分DRL:在OptaPlanner中更快,更轻松

idea中drl文件对于OptaPlanner &#xff08; Drools Planner&#xff09;6.0.0.Beta1&#xff0c;我已经用更优雅的ConstraintMatch系统替换了ConstraintOccurrence。 结果是您的DRL评分文件为&#xff1a; 快多了 更容易读写 错误的发生率要低得多&#xff0c;因为它们使得…

超棒的Glide图片加载

GitHub开源&#xff1a;https://github.com/bumptech/glide 超棒的工具&#xff0c;竟然还可以加载.gif !!Glide完全基于Picasso&#xff0c;沿袭了其简洁风格&#xff0c;并在其基础上做了大量优化与改进。 1、Glide默认的Bitmap格式是RGB_565&#xff0c;而Picasso默认ARGB_…

JUnit 5符合AssertJ

JUnit 5在断言库中带来了很多改进&#xff0c;这主要归功于Java 8和Lambda Expression支持以及新断言&#xff08;如assertAll &#xff0c; assertTimeout或assertThrows 。 尽管我真的很喜欢JUnit 5&#xff0c;但我相信AssertJ在生产级单元测试中仍然是必须的&#xff0c;我…

开源GraphView的使用--数据统计

最近做室内定位需要绘出加速度传感器输出的三个方向的加速度曲线&#xff0c;找到了开源https://github.com/jjoe64/GraphView-Demos&#xff0c;省去了要重新学MatLab **。 在http://www.android-graphview.org/download--getting-started.html下载.jar包。 1、GraphView的使…

json绑定到实体_绑定到JSON和XML –处理集合

json绑定到实体EclipseLink JAXB&#xff08;MOXy&#xff09;的优势之一是能够使用单个元数据集将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折中集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5&#xff08;和EclipseLink 2.4.2&#xff09;中解…