Amazon S3 API java uitl
依赖:
<!-- aws 1.11.486 -->
<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-core</artifactId><version>${awsjavasdk.version}</version><scope>compile</scope>
</dependency>
<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-kms</artifactId><version>${awsjavasdk.version}</version><scope>compile</scope>
</dependency>
<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>${awsjavasdk.version}</version><scope>compile</scope>
</dependency>
AwsS3Client
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;@Repository
public class AmazonS3Client {//连接云平台ip端口@Value("${endpoint}")private String endpoint;//创建AmazonS3Clientpublic AmazonS3 createS3Client(String accessKey,String secretKey){try {AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);/*ClientConfiguration cfg = new ClientConfiguration();cfg.setProtocol(Protocol.HTTP);*/AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, "")).build();return amazonS3;}catch (Exception e) {e.printStackTrace();}return null;}//获取AmazonS3Client public AmazonS3 get_s3_client(String lisk_addr,String accessKey,String secretKey){try {AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);ClientConfiguration cfg = new ClientConfiguration();cfg.setProtocol(Protocol.HTTP);//设置客户端协议
// cfg.setMaxConnections(10);//设置最大连接数10
// cfg.setConnectionTimeout(5000);//设置连接超时5秒
// cfg.setSocketTimeout(2000);//设置传输数据超时时间为2秒AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withClientConfiguration(cfg).withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(lisk_addr, "")).build();return amazonS3;}catch (Exception e) {e.printStackTrace();}return null;}
}
s3桶常用操作类
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;
import com.csg.dataprocess.baidubce.service.CephPublicService;
import org.springframework.stereotype.Service;public class AwsS3Bucket extends AwsS3Client {/*** 创建公有bucket*/public boolean createPublicBucket(AmazonS3 s3Client ,String bucketName) {if (!s3Client.doesBucketExistV2(bucketName)) {CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);createBucketRequest.withCannedAcl(CannedAccessControlList.PublicReadWrite);s3Client.createBucket(createBucketRequest);String bucketLocation = s3Client.getBucketLocation(new GetBucketLocationRequest(bucketName));System.out.println("Bucket location: " + bucketLocation);return true;}else {return false;}}/*** 创建私有bucket*/public boolean createPrivateBucket(AmazonS3 s3Client, String bucketName) {if (!s3Client.doesBucketExistV2(bucketName)) {CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);createBucketRequest.withCannedAcl(CannedAccessControlList.Private);s3Client.createBucket(createBucketRequest);String bucketLocation = s3Client.getBucketLocation(new GetBucketLocationRequest(bucketName));System.out.println("Bucket location: " + bucketLocation);return true;}else {return false;}}/*** 开启bucket的多版本*/public String setBucketVersionOpen(AmazonS3 s3Client, String bucketName) {BucketVersioningConfiguration configuration = new BucketVersioningConfiguration().withStatus(BucketVersioningConfiguration.ENABLED);//Enabled SUSPENDEDSetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName, configuration);s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName);return conf.getStatus();}/*** 暂停bucket的多版本*/public String setBucketVersionSupended(AmazonS3 s3Client, String bucketName) {BucketVersioningConfiguration configuration = new BucketVersioningConfiguration().withStatus(BucketVersioningConfiguration.SUSPENDED);//Enabled SUSPENDEDSetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName, configuration);s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName);return conf.getStatus();}/*** bucket 列表*/public List<Bucket> listBuckets(AmazonS3 s3Client ) {List<Bucket> listBuckets = s3Client.listBuckets();return listBuckets;}/*** 创建一个s3桶-默认*/public void createBucketBase() {Bucket bucket = s3.createBucket(bucketName);System.out.println(bucket.toString());}/*** 创建一个s3桶-带参数*/public void createBucketWithParams() {//指定名称和区域CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName, region);//是否启用对象锁-启用后,阻止删除对象createBucketRequest.setObjectLockEnabledForBucket(true);Bucket bucket = s3.createBucket(createBucketRequest);System.out.println(bucket.toString());}/*** 删除一个s3桶*/public void delBucket(AmazonS3 s3Client ,String bucketName) {s3Client.deleteBucket(bucketName);}/*** 判断s3桶是否存在*/ public boolean doesBucketExist(AmazonS3 s3Client ,String bucketName) {return s3Client.doesBucketExistV2(bucketName);}/*** s3桶配置*/public void configBucket() {/*** 加速配置*/BucketAccelerateConfiguration bucketAccelerateConfiguration = new BucketAccelerateConfiguration(BucketAccelerateStatus.Enabled);s3.setBucketAccelerateConfiguration(bucketName, bucketAccelerateConfiguration);/*** 权限配置*///公共访问权限SetBucketAclRequest setBucketAclRequest = new SetBucketAclRequest(bucketName, CannedAccessControlList.Private);s3.setBucketAcl(setBucketAclRequest);//访问控制列表AccessControlList accessControlList = new AccessControlList();accessControlList.setRequesterCharged(true);accessControlList.setOwner(null);SetBucketAclRequest setBucketAclRequest2 = new SetBucketAclRequest(bucketName, accessControlList);s3.setBucketAcl(setBucketAclRequest2);/*** 分析配置*/AnalyticsConfiguration analyticsConfiguration = new AnalyticsConfiguration();analyticsConfiguration.setId(null);SetBucketAnalyticsConfigurationRequest setBucketAnalyticsConfigurationRequest = new SetBucketAnalyticsConfigurationRequest(bucketName, analyticsConfiguration);s3.setBucketAnalyticsConfiguration(setBucketAnalyticsConfigurationRequest);/*** 生命周期配置*/BucketLifecycleConfiguration bucketLifecycleConfiguration = new BucketLifecycleConfiguration();List<BucketLifecycleConfiguration.Rule> rules = new ArrayList();//需要预先制定规则BucketLifecycleConfiguration.Rule rule = new BucketLifecycleConfiguration.Rule().withId(null);rules.add(rule);bucketLifecycleConfiguration.setRules(rules);SetBucketLifecycleConfigurationRequest setBucketLifecycleConfigurationRequest = new SetBucketLifecycleConfigurationRequest(bucketName, bucketLifecycleConfiguration);s3.setBucketLifecycleConfiguration(setBucketLifecycleConfigurationRequest);/*** 加密配置* 当对象存储在s3时默认是加密的*/SetBucketEncryptionRequest setBucketEncryptionRequest = new SetBucketEncryptionRequest();setBucketEncryptionRequest.setBucketName(bucketName);ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = new ServerSideEncryptionConfiguration();//同样,需要预先制定规则serverSideEncryptionConfiguration.setRules(null);setBucketEncryptionRequest.setServerSideEncryptionConfiguration(serverSideEncryptionConfiguration);s3.setBucketEncryption(setBucketEncryptionRequest);/*** 版本控制配置*/BucketVersioningConfiguration bucketVersioningConfiguration = new BucketVersioningConfiguration();bucketVersioningConfiguration.setMfaDeleteEnabled(true);bucketVersioningConfiguration.setStatus(BucketVersioningConfiguration.ENABLED);SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName, bucketVersioningConfiguration);s3.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);/*** 为s3指定一个策略-s3的策略是唯一的*/s3.setBucketPolicy(null);/*** 日志记录配置*/s3.setBucketLoggingConfiguration(null);/*** 通知配置*/s3.setBucketNotificationConfiguration(null);/*** 复制配置*/s3.setBucketReplicationConfiguration(null);/*** 标签配置*/s3.setBucketTaggingConfiguration(null);/*** 静态网站托管配置*/s3.setBucketWebsiteConfiguration(null);/*** 指标配置*/s3.setBucketMetricsConfiguration(null);}//创建桶public Map<String,Object> create_bucket(String bucket_name,String accessKey,String secretKey,String endpoint,Integer state){Map<String,Object> map = new HashMap<String, Object>();try {boolean result = false;AmazonS3 s3Client =createS3Client(accessKey, secretKey,endpoint);if(state!=null&&state==1)result = createPublicBucket(s3Client, bucket_name);elseresult = createPrivateBucket(s3Client, bucket_name);if(result){CephConfig.setCephConfig(s3Client,bucket_name);map.put("state","桶 "+bucket_name+" 创建成功");map.put("user_id",s3Client.getS3AccountOwner().getDisplayName());map.put("bucket_name",bucket_name);}elsethrow new Exception("创建桶出错了");} catch (Exception e) {e.printStackTrace();map.put("state","桶 "+bucket_name+" 创建失败");map.put("user_id","空");map.put("bucket_name",bucket_name);map.put("Exception",e.getMessage());}return map;}
}
s3桶文件操作类
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;
import com.csg.dataprocess.baidubce.service.CephPublicService;
import org.springframework.stereotype.Service;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;public class AwsS3File extends AwsS3Client {/*** 列出一个s3桶内的文件*/
public List<S3ObjectSummary> listObjects(AmazonS3 s3Client ,String bucketName) {return s3Client.listObjects(bucketName).getObjectSummaries();}
}/*** 列出一个s3桶内的文件*/
public ObjectListing listObjects(AmazonS3 s3Client ,String bucketName, String prefix) {ObjectListing objects = s3Client.listObjects(bucketName, prefix);return objects;}/*** 分页列出一个s3桶内的文件*/
public List<List<S3ObjectSummary>> listBucketObjPage(AmazonS3 s3Client ,String bucketName, int maxKey) {// 用户可设置每页最多条记录maxKeyListObjectsRequest listObjectsRequest = new ListObjectsRequest();listObjectsRequest.setBucketName(bucketName);listObjectsRequest.withMaxKeys(maxKey);ArrayList<List<S3ObjectSummary>> listall = new ArrayList<>();boolean isTruncated = true;while (isTruncated) {ObjectListing listObjectsResponse = s3Client.listObjects(listObjectsRequest);isTruncated = listObjectsResponse.isTruncated();if (listObjectsResponse.getNextMarker() != null) {listObjectsRequest.withMarker(listObjectsResponse.getNextMarker());}//加入listallList<S3ObjectSummary> objectSummaries = listObjectsResponse.getObjectSummaries();listall.add(objectSummaries);}return listall;}/*** 上传一个文件到s3桶* 注意1:如果key相同,则替换* 注意2:如果key是一个层次路径,那么s3会自动创建相应文件夹*/public void putObj(AmazonS3 s3Client ,String bucketName, String objectKey, String filePath) {s3Client.putObject(bucketName, objectKey, new File(filePath));}/*** 上传一个文件到s3桶* 注意1:如果key相同,则替换* 注意2:如果key是一个层次路径,那么s3会自动创建相应文件夹*/public void putObj(AmazonS3 s3Client ,String bucketName,String objectKey,File file) {s3Client.putObject(bucketName, objectKey, file);
// s3Client.putObject(bucketName, key, input, metadata);}/*** 下载对象*/public void downObj(AmazonS3 s3Client ,String bucketName, String objectKey, String saveFilePath) {s3Client.getObject(new GetObjectRequest(bucketName, objectKey), new File(saveFilePath));}/*** 删除对象*/public void delObj(AmazonS3 s3Client ,String bucketName, String objectKey) {s3Client.deleteObject(bucketName, objectKey);}/*** 输出对象下载URL*/public URL getURLS(AmazonS3 s3Client ,String bucketName, String objectKey) {GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectKey);URL url = s3Client.generatePresignedUrl(request);return url;}/*** 输出从重命名后的对象下载URL*/public URL getURLS_rename(AmazonS3 s3Client ,String bucketName, String objectKey,String file_name) {GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectKey);request.addRequestParameter("response-content-disposition","filename="+file_name+";");URL url = s3Client.generatePresignedUrl(request);return url;}/*** 获取附件下载URL*/public String getFileUrl(AmazonS3 s3,String bucketName,String fileName) {GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName,fileName);request.addRequestParameter("response-content-disposition","attachment;");URL url = s3.generatePresignedUrl(request);return url.toString();}/*** 获取附件下载URL并重命名*/public String getFileUrl_rename(AmazonS3 s3,String bucketName,String ceph_key,String file_name) {GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName,ceph_key);request.addRequestParameter("response-content-disposition","attachment;filename="+file_name+";");URL url = s3.generatePresignedUrl(request);return url.toString();}/*** 分片上传文件*/public String uploadAppenderFile(byte[] fileData,AmazonS3 s3,String bucketName,String filepath) {//生成上传文件的随机序号String fileName = UUID.randomUUID().toString().replaceAll("-", "");List<PartETag> partETags = new ArrayList<PartETag>();InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, fileName);InitiateMultipartUploadResult initResponse = s3.initiateMultipartUpload(initRequest);try {File file = new File(filepath);//文件路径long contentLength = file.length();long partSize = 5242880; // 设置分片大小. 测试采用5M分片便于测试long filePosition = 0;for (int i = 1; filePosition < contentLength; i++) {partSize = Math.min(partSize, (contentLength - filePosition));// 创建分片上传请求UploadPartRequest uploadRequest = new UploadPartRequest().withBucketName(bucketName).withKey(fileName).withUploadId(initResponse.getUploadId()).withPartNumber(i).withFileOffset(filePosition).withPartSize(partSize).withFile(file);// 将分片添加到列表.partETags.add(s3.uploadPart(uploadRequest).getPartETag());filePosition += partSize;}CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, fileName, initResponse.getUploadId(), partETags);s3.completeMultipartUpload(compRequest);} catch (Exception e) {e.printStackTrace();}return fileName;}
}
Amazon S3 API java uitl相关推荐
- Amazon S3 的 java sdk简单使用
Amazon S3 的 java sdk简单使用 在开发过程中基本都需要使用到对象存储技术. 对于一些国内的项目来说,可以使用阿里云,七牛云,京东云等开发平台进行开发对接存储对象. 而对于海外的项目, ...
- Amazon S3 API
一.概述 Amazon s3,全称为Amazon Simple Storage Service.EC2和S3是Amazon最早推出的两项云服务. REST,这也是比较火的一种Web服务架构.简单来说 ...
- AWS宣布Amazon S3将停止支持SigV2
AWS原本宣布Amazon S3从6月24日开始,停止支持旧的签章方法Signature Version 2(SigV2),现在改变计划,虽然新的储存桶不再支持SigV2,但现存的部分仍可继续使用,并 ...
- 全方位保护您在 Amazon S3 的数据资产-访问控制详解
2006年,Amazon S3 作为亚马逊云科技发布的第一款公有云服务面世,如今,成千上万的亚马逊云科技客户在利用 Amazon S3 创造各类激动人心的应用.从企业数据湖.机器学习存储,到 HPC. ...
- aws api gateway 创建一个REST API作为Amazon S3代理
你可能想把样本API导入为Amazon S3的代理,如样本API作为Amazon S3代理的OpenAPI定义所示.关于如何使用OpenAPI定义导入API的说明,请参阅使用OpenAPI配置REST ...
- Amazon S3 功能介绍
一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...
- 马逊s3云存储接口_使用 Amazon S3 云服务轻松实现存储
Amazon Simple Storage Service (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片.视频.音乐和文档. S3 提供一个 RESTful A ...
- 亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传
亚马逊s3的使用方法 在Java世界中,有几种很好的方法可以将内容上传到S3存储桶-在本文中,我们将研究jclouds库为此提供的功能. 要使用jclouds –特别是本文中讨论的API,应将此简单的 ...
- 使用jclouds库在Amazon S3上上传
在Java世界中,有几种将内容上载到S3存储桶的好方法–在本文中,我们将研究jclouds库为此提供的功能. 要使用jclouds –特别是本文中讨论的API,应将这种简单的Maven依赖项添加到项目 ...
最新文章
- docker 实现redis集群搭建
- ESLint里的规则教会我,无规矩 不编程
- c++关联容器的成员函数find的一个例子
- 最大堆的Java实现
- 快狗打车通过港交所上市聆讯
- java 反射 动态调动set_通过Java的反射动态调用类的set和get方法
- 桌面共享工具(可以实现RTMP直播、K歌、投屏等功能)
- Mac版 WPS尾部空格没有下划线解决
- pygame画圆练习赤橙黄绿青蓝紫
- 使用Tensorflow Lite在Android上进行AI危害检测
- 计算机应用基础谭忠兵,全程导学 | 第19期 足履实地,无畏远方——专访谭忠兵老师...
- vue中播放flv流视频
- 【...】12306官网购买指定铺位的车票
- 蓝桥杯评分标准_第十届蓝桥杯软件个人赛校内选拔赛评分标准和选拔标准.doc...
- 罗技G502 HERO 主要的DPI灯光突然不亮了
- OpenCV基础学习
- RISCV toolchain编译工具链搭建
- Renderbus瑞云渲染正式支持UE云渲染!离线渲染+实时渲染=渲染起飞!
- 分享软件测试人员必备的60个测试工具,赶紧收藏起来
- 如何修复Microsoft Excel不响应错误