Java使用S3的一些操作

首先下载所需要的包

     <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.11.868</version></dependency>

然后就是自己封装的一些S3方法了 上完整代码

package com.idp.cmarket.aws;import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.model.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;import java.io.IOException;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.IntStream;/*** @author jiawei.zhao* Date: 2021/05/24 15:31*/
@Component
public class S3Util {/*** 禁用调用无参构造函数*/private S3Util() {}private static String accessKeyId = "";private static String accessKeySecret = "";private static String bucketName = "";private static String regionName = "cn-north-1";private static String S3Url ="https://test.s3.cn-north-1.amazonaws.com.cn/";/*** S3初始化* @return*/public static AmazonS3 amazonS3() {AWSCredentials awsCredentials = new BasicAWSCredentials(accessKeyId, accessKeySecret);AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCredentials));//设置S3的地区builder.setRegion(regionName);AmazonS3 s3Client = builder.build();return s3Client;}/*** 上传图片到S3* @param url* @return* @throws Exception*/public static String upload(String url,String directory) throws Exception {AmazonS3 amazonS3Client = amazonS3();//将url转为MultipartFile对象MultipartFile file = urlToMultipartFile(url);//通过url获取图片名称String fileName = getFileName(url);if(StringUtils.isNotEmpty(directory)){fileName=directory+"/"+fileName;}ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType(file.getContentType());objectMetadata.setContentLength(file.getSize());//调用S3上传文件PutObjectResult putObjectRequest = amazonS3Client.putObject(new PutObjectRequest(bucketName, fileName, file.getInputStream(), objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));return S3Url+fileName;}/*** 下载文件到本地* @param fileName* @return* @throws Exception*/public static boolean downLoad(String fileName, String filePath) throws Exception{AmazonS3 amazonS3Client = amazonS3();S3Object object = amazonS3Client.getObject(new GetObjectRequest(bucketName,fileName));if(object!=null){InputStream input = null;FileOutputStream fileOutputStream = null;byte[] data = null;try {//获取文件流input=object.getObjectContent();data = new byte[input.available()];int len = 0;fileOutputStream = new FileOutputStream(filePath);while ((len = input.read(data)) != -1) {fileOutputStream.write(data, 0, len);}} catch (IOException e) {e.printStackTrace();}finally{if(fileOutputStream!=null){try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if(input!=null){try {input.close();} catch (IOException e) {e.printStackTrace();}}}}return true;}/*** 读取S3的Excel数据* @param fileName* @return* @throws Exception*/public static S3Object readExcelDataForS3(String fileName,String directory) throws Exception{AmazonS3 amazonS3Client = amazonS3();if(StringUtils.isNotEmpty(directory)){fileName=directory+"/"+fileName;}return amazonS3Client.getObject(new GetObjectRequest(bucketName,fileName));}/*** 移动文件* @param fileName* @param moverFileName*/public static void moveFile(String fileName,String moverFileName){try{AmazonS3 amazonS3Client = amazonS3();//目前哪个桶 目前的文件名 移动到的桶 移动过去的文件名CopyObjectResult copyFile = amazonS3Client.copyObject(bucketName, fileName, bucketName, moverFileName);//判断是否上传成功if(StringUtils.isNotEmpty(copyFile.getETag())){//将当前桶中的文件删除amazonS3Client.deleteObject(bucketName, fileName);}}catch (AmazonServiceException e) {System.err.println(e.getErrorMessage());System.exit(1);}}/*** 获取文件列表* @param limit* @param prefix* @return* @throws IOException*/public static List<S3ObjectSummary> getFileListPaginator(Integer limit,String prefix) throws IOException{try {AmazonS3 amazonS3Client = amazonS3();ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName).withMaxKeys(limit).withPrefix(prefix);ListObjectsV2Result result;result = amazonS3Client.listObjectsV2(req);
//          for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {//              System.out.printf(" - %s (size: %d)\n", objectSummary.getKey(), objectSummary.getSize());
//          }result.setTruncated(true);return result.getObjectSummaries();} catch (AmazonServiceException e) {// 已经打通S3但处理失败e.printStackTrace();} catch (SdkClientException e) {// 链接S3失败e.printStackTrace();}return null;}/*** url转MultipartFile* @param url* @return* @throws Exception*/public static MultipartFile urlToMultipartFile(String url) throws Exception {File file = null;MultipartFile multipartFile = null;try {HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();httpUrl.connect();file = inputStreamToFile(httpUrl.getInputStream(),"template.png");multipartFile = fileToMultipartFile(file);httpUrl.disconnect();} catch (Exception e) {e.printStackTrace();}return multipartFile;}/*** inputStream 转 File* @param ins* @param name* @return* @throws Exception*/public static File inputStreamToFile(InputStream ins, String name) throws Exception{File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);OutputStream os = new FileOutputStream(file);int bytesRead;int len = 8192;byte[] buffer = new byte[len];while ((bytesRead = ins.read(buffer, 0, len)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();return file;}/*** file转multipartFile* @param file* @return*/public static MultipartFile fileToMultipartFile(File file) {FileItemFactory factory = new DiskFileItemFactory(16, null);FileItem item=factory.createItem(file.getName(),"text/plain",true,file.getName());int bytesRead = 0;byte[] buffer = new byte[8192];try {FileInputStream fis = new FileInputStream(file);OutputStream os = item.getOutputStream();while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();fis.close();} catch (IOException e) {e.printStackTrace();}return new CommonsMultipartFile(item);}/*** 根据正则获取HC图片名称* @param url* @return*/public static String getFileName(String url){//指定图片后缀名称String suffixes="bmp|jpg|jpeg|png|gif|BMP|JPG|JPEG|PNG|GIF";Pattern pat=Pattern.compile("[\\w]+[\\.]("+suffixes+")");//正则判断Matcher mc=pat.matcher(url);//条件匹配while(mc.find()) {String fileName= mc.group();return fileName;}return url;}}

以上就是Java操作S3的一些方法
转载请注明地址~

Java使用S3的一些操作相关推荐

  1. java s3_Amazon S3 功能介绍

    一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...

  2. Java中的图像锐化操作

    ** Java中的图像锐化操作 ** 一.该图像锐化的思想: 本文的图像锐化是将图像中的R,G,B的值分别从原图像中提出,然后将分别将这三个R,G,B的值分别与卷积核进行卷积,最终再将最后的三个卷积的 ...

  3. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  4. JAVA通过JDBC连接并操作MySQL数据库

    JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...

  5. Java中Properties类的操作

    Java中Properties类的操作 ============================================= com.gordon.constant Constant.java: ...

  6. Java中的对象序列化操作

    文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...

  7. Java 8 - Stream流骚操作解读2_归约操作

    文章目录 Pre 什么是归约操作 元素求和 reduce reduce如何运行的 最大值和最小值 Pre Java 8 - Stream流骚操作解读见到过的终端操作都是返回一个 boolean ( a ...

  8. java communiframe_[Java教程]javascript iframe相关操作

    [Java教程]javascript iframe相关操作 0 2014-08-21 21:02:45 1. 获得iframe的window对象 iframeElement.contentWindow ...

  9. Java中HashMap的常用操作

    Java中HashMap的常用操作 HashMap<Integer, Integer> hashMap = new HashMap<>();hashMap.put(5, 2); ...

  10. java 聚合_Java 8 聚合操作详解

    Oracle在2014年3月19日如期发布了Java 8.Java 8版本被认为是具有里程碑意义的一个版本,Oracle在该版本中添加了许多新特性,包括Lambda表达式.方法引用.加强了安全等等. ...

最新文章

  1. R语言笔记7:认识循环函数、lapply和sapply
  2. IntelliJ IDEA(五) :酷炫插件系列
  3. java ssh框架 struts spring hibernate 简介
  4. Visual Studio2019 应用程序无法正常启动0xc000007b
  5. FM实现F4帮助系列三:弹出框多筛选…
  6. sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接
  7. mysql事务回滚后,自增ID仍然增加
  8. 中考英语听说计算机考试满分,2020北京中考英语听说机考题型分值及满分技巧...
  9. 设计一个python程序来计算显示通过如图_Python程序设计 17计算机、物联网 合班-中国大学mooc-试题题目及答案...
  10. Tomcat下载安装及配置
  11. android 编译 libjpeg-turbo,android 编译libjpeg-turbo
  12. TensorRt - caffe中支持prelu
  13. WCDMA常见缩略语
  14. react 树形结构递归方法
  15. 微信订阅号之1-注册
  16. 一个提升n倍效率的写作工具,我咋不知道?
  17. java对静态图片/Gif图片/视频进行水印
  18. Windows10字符映射表的搜索功能
  19. exlc表格怎么换行_excel如何换行_表格怎么换行上下换行
  20. 项目实战:基于 TCP 的局域网内高性能文件传输系统设计与实现

热门文章

  1. devops什么意思_devops是什么意思
  2. 2.两数相加(leetcode-2)
  3. JetBrains(Intellij, pycharm)多行编辑模式
  4. 哈夫曼编码(自底向上的哈夫曼编码)
  5. python发邮件主机找不到_从本地主机(不登录STMP服务器)用Python发送电子邮件时,如何解决套接字错误?...
  6. 一加会不会适配鸿蒙系统,或将适配高通平台 传闻一些手机厂商正接触华为鸿蒙OS计划适配...
  7. w3wp oracle连接数高,分析案例:應用服務器W3WP進程CPU持續超過百分之九十(Oracle客戶端Bug)...
  8. android服务之service(其二)关于aidl进程间通信,Android初级教程进程间的通信AIDL
  9. python中configparser详解_Python 解析配置模块之ConfigParser详解
  10. git remote: User permission denied