1、创建工具类 AwsS3Utils

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
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 com.amazonaws.services.s3.model.*;import java.io.File;/*** 工具类:S3服务器中文件上传、删除操作(用来存储jmeter脚本中参数化文件)*/
public class AwsS3Utils {private static org.apache.logging.log4j.Logger logger;private static final String FILE_TYPE = "fileType";//隐私信息已模糊处理(keyID、key、endpoint、bucket)/*** keyID*/private static String accessKeyID = "*************";/*** key*/private static String secretKey = "************************";/*** endpoint*/private static String endpoint = "https://xxx.b.xxxxx.cn:443/";/*** default bucket*/private static String defaultBucket = "xxxxxxxx";/*** 向 AWS 客户端明确提供凭证*/private static final BasicAWSCredentials AWS_CREDENTIALS = new BasicAWSCredentials(accessKeyID, secretKey);/*** s3 客户端*/private static final AmazonS3 S3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(AWS_CREDENTIALS)).withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, "")).build();/*** 存放文件至s3** @param bucketName 桶名称 AmazonS3BucketConstant* @param key        key名称* @param file       文件* @return PutObjectResult*/public static PutObjectResult putFile(String bucketName, String key, File file) {long startMillis = System.currentTimeMillis();long endMillis;PutObjectResult result = null;try {PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);String name = file.getName();//新增文件目录 performanceFile// 记录文件类型ObjectMetadata metadata = new ObjectMetadata();metadata.addUserMetadata(FILE_TYPE, name.substring(name.lastIndexOf(".") + 1));putObjectRequest.setMetadata(metadata);result = S3.putObject(putObjectRequest);endMillis = System.currentTimeMillis();} catch (AmazonServiceException e) {endMillis = System.currentTimeMillis();} catch (SdkClientException e) {// Amazon S3 couldn't be contacted for a response, or the client// couldn't parse the response from Amazon S3.}return result;}/*** 根据文件名称进行删除* @param bucketName* @param key* @return*/public static void delFile(String bucketName, String key){if(S3.doesBucketExistV2(bucketName)==false){logger.info(bucketName+"不存在");return ;}//根据桶名及文件夹名获取该桶该文件夹操作对象ListObjectsRequest lor = new ListObjectsRequest().withBucketName(defaultBucket).withPrefix("perfFile/");ObjectListing objectListing = S3.listObjects(lor);String str_key = null;//根据操作对象列出所有文件对象,单个对象使用objectSummary.getKey()即可获取此文件完整路径,配合桶名可以用于操作for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()){str_key = objectSummary.getKey();//文件名是否匹配if(str_key.matches(key)){//根据桶名及key信息进行删除S3.deleteObject(bucketName,key);break;}}}public static void delFiles(String key){delFile(defaultBucket,key);}public static PutObjectResult putFile(String key, File file) {return putFile(defaultBucket, key, file);}/*** 读取文件* @param bucketName 桶名称 AmazonS3BucketConstant* @param key        key名称* @return S3Object: s3Object.getBucketName(); s3Object.getKey(); InputStream inputStream = s3Object.getObjectContent()...* 务必关闭 S3Object:     s3Object.close();*/public static S3Object getFile(String bucketName, String key) {long startMillis = System.currentTimeMillis();long endMillis;S3Object s3Object = null;try {s3Object = S3.getObject(bucketName, key);endMillis = System.currentTimeMillis();} catch (AmazonServiceException e) {endMillis = System.currentTimeMillis();} catch (SdkClientException e) {// Amazon S3 couldn't be contacted for a response, or the client// couldn't parse the response from Amazon S3.}return s3Object;}public static S3Object getFile(String key) {return getFile(defaultBucket, key);}
}

2、controller层调用示例

@RequestMapping("/parametric")
@RestController
public class ParametricController {private ParametricService parametricService ;public final Logger logger=  LoggerFactory.getLogger(this.getClass());/*** 文件上传* @param multipartFile* @param parametricFilePath* @param parametricFileS3Path* @throws Exception*/@RequestMapping(method = RequestMethod.POST,value ="/create")public void create(@RequestParam("file") MultipartFile multipartFile,@RequestParam("parametricFilePath") String parametricFilePath,@RequestParam("parametricFileS3Path") String parametricFileS3Path) throws  Exception{//空文件限制if(multipartFile.isEmpty()){return "上传文件不能为空!";}//文件大小限制,最大单文件20Mif(multipartFile.getSize()>20971520){return "上传文件大小超过20M!";}//创建s3 client对象AwsS3Utils awsS3Utils=new AwsS3Utils();String localFileName=multipartFile.getOriginalFilename();//获取文件名称String s3Path="perfFile/";String key=s3Path+localFileName;//性能测试参数化文件s3服务器存放位置String fileName = localFileName.substring(0,localFileName.length()-4);String last4Str=localFileName.substring(localFileName.length()-4);//文件名后缀String localFilePath="D:\\testDownloading";//文件类型判断,只能为CSV、txt类型if(!last4Str.equalsIgnoreCase(".csv")){if(!last4Str.equalsIgnoreCase(".txt")){return "只能上传csv、txt两种类型的文件!";}}//根据上传的文件名称去参数化文件数据库中查询是否存在重名if(parametricService.isExistFile(fileName)){return "已存在重名文件,请重命名后上传!";}//将multipartFile转为FileFile uploadFile=new File(localFileName);FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),uploadFile);if(uploadFile.exists()){uploadFile.deleteOnExit();}PutObjectResult putObjectResult=awsS3Utils.putFile(key,uploadFile);logger.info("文件"+localFileName+"上传到S3服务器成功!");}/***从s3服务器中下载参数化文件到本地指定目录*@author by junior* @date 2020/7/27.* @param key 文件KEY* @param targetFilePath 本地文件存放路径* @throws IOException*/@RequestMapping(method = RequestMethod.GET,value ="/download")public static void amazonS3Downloading( @RequestParam("key") String key,@RequestParam("targetFilePath") String targetFilePath) throws IOException {S3Object parameterFile= AwsS3Utils.getFile(key);if(parameterFile!=null){InputStream inputStream=null;FileOutputStream fileOutputStream=null;byte[] data=null;try {//获取S3object对象文本信息inputStream=parameterFile.getObjectContent(); data =new byte[inputStream.available()];int len=0;fileOutputStream=new FileOutputStream(targetFilePath);while((len=inputStream.read(data)) != -1){fileOutputStream.write(data,0,len);}logger.info("*********下载文件成功!*********");} catch (IOException e) {e.printStackTrace();} finally {if(fileOutputStream!=null){try {fileOutputStream.close();//文件流关闭} catch (IOException e) {e.printStackTrace();}}if(inputStream!=null){try {inputStream.close();//文件流关闭} catch (IOException e) {e.printStackTrace();}}}}/*** 参数化文件信息删除* @param parametricId* @return* @throws Exception*/@RequestMapping(method = RequestMethod.DELETE,value = "/delete")public void delete(@RequestParam Integer parametricId) throws Exception{Integer resultDel = 0;Result<InterfaceParametricMappingRecord> records = interfaceParametricMappingDao.selectInterfaceParametricMappingByParametricId(parametricId);//关联表中未存在引用if (records.size() == 0 && records != null) {//删除S3服务器上指定文件Result<ParametricRecord> pRecord = parametricDao.selectParametricById(parametricId);if (pRecord != null && pRecord.size() > 0) {AwsS3Utils awsS3Utils = new AwsS3Utils();String paraName = pRecord.get(0).getParametricFileName()+pRecord.get(0).getParametricFileSuffix();//性能测试参数化文件s3服务器存放位置String s3Path = "perfFile/";String key = s3Path + paraName;//删除S3服务器上指定文件awsS3Utils.delFiles(key);}resultDel = parametricDao.delParametricById(parametricId);}}}

如觉得对你有帮助,请记得点个赞,个人整理不易....

java实现基于AmazonS3文件上传、下载、删除操作相关推荐

  1. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  2. java formfile_基于Struts文件上传(FormFile)详解

    Struts中FormFile用于文件进行上传 1.在jsp文件中进行定义 名字: 头像: 2.在Form表单中定义FormFile /* * Generated by MyEclipse Strut ...

  3. 基于Django的文件上传下载删除管理器

    这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...

  4. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  5. springboot---fastDFS 简单文件上传/下载/删除

    本来想简单的记录一下上传/下载,后来看着看着,发现这块的知识点太多.就记录下简单的操作,后面在补充 这里采用fastdfs分布式文件系统的形式来进行操作的(关于fastdfs的知识点有很多,这里就不赘 ...

  6. cypress之实现文件上传下载以及操作iframe下页面元素

    前面讲解了使用cypress框架如何定位.操作页面元素以及校验测试结果,此次课程将介绍如何实现文件上传.操作iframe下面的页面原因以及操作shadow dom下的页面元素.为了完成此次课程目标,拆 ...

  7. c# FTP服务器文件上传下载等操作

    文章目录 判断FTP连接 FTP文件上传 FTP文件下载 删除指定FTP文件 删除指定FTP文件夹 获取FTP上文件夹/文件列表 创建文件夹 获取指定FTP文件大小 更改指定FTP文件名称 移动指定F ...

  8. FastDFS上传下载删除操作

    1.第一步 添加fastdfs-client.properties配置文件并修改 ## fastdfs-client.propertiesfastdfs.connect_timeout_in_seco ...

  9. Java操作ftp,上传,下载,删除操作

    使用java commons net包中的api可以方便操作ftp操作. import java.io.File; import java.io.FileInputStream; import jav ...

最新文章

  1. [学习笔记]51单片机
  2. Ubuntu Linux 提出新的发布模式——测试周
  3. 多表利用DIH批量导入数据并建立索引注意事项
  4. 一个简单的状态机设计
  5. 关于使用代理解决跨域问题的原理
  6. mfc在运行的时候为什么没有实例化_Redis(7)——持久化【一文了解】
  7. pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……
  8. mac homebrew安装php5.3,mac mini brew安装了php54,但是我的工作php还是5.3.15?
  9. 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
  10. 如何安装JCreator
  11. 关于C语言全局变量定义和引用写法总结
  12. 腾讯笔试——安排机器 【 题目描述】小 Q 的公司最近接到 m 个任务, 第 i 个任务需要 xi 的时间去完成, 难度等级为 yi。 小 Q 拥有 n 台机器, 每台机器最长工作时间 zi, 机器等
  13. 如何解决运行Spark-shell,出现报错Unable to load native-hadoop library for your platform的问题
  14. 微信网页中点击图片放大
  15. python3下的webpy运行详解——webpy,session,cookie
  16. STM32F103xx OLED旋转显示图片
  17. RC滤波 电阻电容的损耗计算方法
  18. SQL SERVER全国行政区划 精确到区
  19. 2018全球互联网经济大会,春季峰会在南京开幕
  20. 客户第一 战略交流 | 数澜科技走进欧冶云商

热门文章

  1. Android 蓝牙Mesh组网代码详解
  2. 手机编写python苹果_用Python及深度学习实现iPhone X的FaceID功能
  3. 随鼓点跃动的身心:从随身音频系统谈起
  4. 搜狗微信文章爬取(中)
  5. ARM aarch64汇编学习笔记(一):ARMv8架构
  6. vijos1476 旅游规划-动态规划
  7. 一文读懂什么是POE交换机,原理、标准、功率、应用
  8. 创新实训工作记录2018-5-31
  9. linux和window时间不一致,linux时间与Windows时间不一致的解决
  10. Java 中 UTC 如何转换 CST(北京时间)