亚马逊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允许客户端访问更多较低级别的详细信息,例如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 。 我们将实现上传大文件的操作,动态地计算任何给定文件的最佳零件数,并并行执行所有零件的上传。
参考:在j3s 库中,从JCG合作伙伴 Eugen Paraschiv 的jclouds库 上载到baeldung博客。
翻译自: https://www.javacodegeeks.com/2013/04/upload-on-amazon-s3-with-the-jclouds-library.html
亚马逊s3的使用方法
亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传相关推荐
- 亚马逊训练alexa的方法_Alexa对话是AI驱动的对话界面新方法
亚马逊训练alexa的方法 介绍 (Introduction) Looking at the chatbot development tools and environments currently ...
- 亚马逊测评的获得方法及测评环境系统介绍,一次诊断全部解决。
我想大多数卖家应该都是知道亚马逊测评能够快速帮助自己的产品添加评论,获取排名,打造爆款.但是有很多卖家都不清楚亚马逊如何做?获得方法有哪些?那么下面就一起来了解一下! 亚马逊测评如何做? 第一:测评 ...
- 亚马逊测评如何做?亚马逊测评的获得方法?
我想大多数卖家应该都是知道亚马逊测评能够快速帮助自己的产品添加评论,获取排名,打造爆款.但是有很多卖家都不清楚亚马逊如何做?获得方法有哪些?那么下面就一起来了解一下! 4102.png 亚马逊测评如何 ...
- 亚马逊刷好评的方法有哪些?
新上线的产品免不了要刷几单好评,吸引新客户的购买,还可以优化listing.不过最近亚马逊的动作很多,一些刷单群,微信群都被端了,还有很多卖家的评论直接被亚马逊删掉了.现在很多卖家叫苦不迭,不知道还有 ...
- 亚马逊云科技中国峰会:自主驾驶开发平台 Amazon DeepRacer
0.引言 自动驾驶技术的快速发展和应用前景已经引起了广泛的关注,毋庸讳言,无人驾驶已经成为当今及未来前沿科技公司的重点研究方向.在这个领域中,Amazon DeepRacer作为一款全面的自主驾驶开发 ...
- 亚马逊云怎么增加硬盘_亚马逊云硬盘
亚马逊云怎么增加硬盘 There are plenty of cloud storage options available, and many now offer 5 Gb of free spac ...
- 亚马逊标题自动抓取_如何为您的家人提供自动Amazon礼品卡津贴
亚马逊标题自动抓取 When your kids move away to go to school, they'll probably phone home every once in a whil ...
- 亚马逊asin关键词排名追踪_善用亚马逊ABA数据,3步就能将关键词排名冲到首页...
作为亚马逊运营,我们都知道关键词是 Listing 流量入口的重要来源.从买家购买行为路径图来看,机会大部分买家都会通过搜索关键词,进入 Listing,之后经过浏览.对比.加购.才会最终下单. 同时 ...
- 亚马逊asin关键词排名追踪_亚马逊listing关键词的挖掘和布局!让产品关键词排名上首页...
卖家都知道亚马逊A9算法决定listing的排名,而A9算法的运作规律是根据listing中的关键词的相关性来决定产品排名的,相关性主要包括这几个方面:一是关键词与listing本身的相关性:二是客户 ...
最新文章
- 进程和线程基础知识全家桶,30 张图一套带走
- Ecplise中tomcat上运行HTML文件自动加载
- SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单
- EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)
- java 多种类型文件复制_java多种文件复制方式以及效率比较
- RabbitMQ简介以及应用
- HarmonyOS之深入解析自定义组件与布局的实现
- html绘图环境,HTML_HTML5 在canvas中绘制文本附效果图,一、绘制文本 在绘图环境中提 - phpStudy...
- Django接入paypal的账户-准备工作
- python写自动化工具_微软最强 Python 自动化工具开源了!不用写一行代码!
- API系统1.2lite模板管理测试版发布
- MYSQL_BIND结构体_bindColumn、bindParam与bindValue的区别
- centos 6.4 使用sendmail发送邮件(cacti)
- I - 数塔(动态规划)数塔问题
- 优秀的代码是如何分层的?
- mysql全量备份命令_mysql全量备份与增量备份
- javaScript 关于console的理解
- idea创建maven项目失败, Failed to create a Maven project
- Unity tolua 常用方法
- 读博太孤独?你不是一个人!
热门文章
- SpringBoot2.1.9 Mybatis多数据源配置
- 一文搞懂 Java 线程中断
- 响应式布局(手机端)
- java中实现将一个数字字符串转换成逗号分隔的数字串, 	即从右边开始每三个数字用逗号分隔
- 当当网头部和尾部——源码
- java getimage_Java ImageView.getImage方法代码示例
- c# 向mysql插入数据_C#连接mysql数据库 及向表中插入数据的方法
- internet地址java表示
- java中的native关键字有什么作用?(java本地方法)
- apache.camel_Apache Camel 3.1 – XML路由的快速加载