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. jQuery的同胞遍历
  2. 关于 Qt 5,你所需要了解的基础知识
  3. Lua_第17 章 数学库
  4. Unity WebGL 窗口自适应
  5. DataCapa 启动
  6. java中几种常见字符集与乱码介绍
  7. java开发用win7好还是win10_win10和win7哪个好用|两个系统的性能比较
  8. 前端请求数据过多,Promise.all,_.chunk,_.flatten解决方法之一
  9. matlab2015 colormap,matlab中colormap函数
  10. 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
  11. Oracle甲骨文官网必须登录怎么办!!?
  12. 本科计算机 在职研究生想读英语,想读在职研究生但是英语成绩不好怎么办?...
  13. vue2 provide和inject的使用
  14. 求细胞数量:一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
  15. [配置文件]_start.wzd
  16. 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例
  17. 重磅 | 西安思考:“2018国际人工智能院长论坛”专家思想分享
  18. Activity A 调用Activity B 里的方法探索
  19. 如何用 LiquidText 高效阅读分析文献?
  20. c语言编写十六进制编辑器,什么是十六进制编辑器?

热门文章

  1. 1546: 回形取数
  2. vue 中watch函数名_vue中watch的使用
  3. hadoop hdfs文件给其他账号授权
  4. pandas groupby 用法详解
  5. 变量、变量类型与cin的基本用法详解(C++)
  6. java swing 属性控件_Java Swing控件属性归纳
  7. 鸿蒙系统为什么腾讯,鸿蒙系统发布,为什么有人说其为安卓换壳?
  8. 如何查看xbox账号所在服务器,Xbox账号绑定教程
  9. python django restful_利用Django实现RESTful API(一)
  10. 精读《手写 SQL 编译器 - 回溯》 1