java实现基于AmazonS3文件上传、下载、删除操作
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文件上传、下载、删除操作相关推荐
- java操作文件_java操作FTP,实现文件上传下载删除操作
上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...
- java formfile_基于Struts文件上传(FormFile)详解
Struts中FormFile用于文件进行上传 1.在jsp文件中进行定义 名字: 头像: 2.在Form表单中定义FormFile /* * Generated by MyEclipse Strut ...
- 基于Django的文件上传下载删除管理器
这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- springboot---fastDFS 简单文件上传/下载/删除
本来想简单的记录一下上传/下载,后来看着看着,发现这块的知识点太多.就记录下简单的操作,后面在补充 这里采用fastdfs分布式文件系统的形式来进行操作的(关于fastdfs的知识点有很多,这里就不赘 ...
- cypress之实现文件上传下载以及操作iframe下页面元素
前面讲解了使用cypress框架如何定位.操作页面元素以及校验测试结果,此次课程将介绍如何实现文件上传.操作iframe下面的页面原因以及操作shadow dom下的页面元素.为了完成此次课程目标,拆 ...
- c# FTP服务器文件上传下载等操作
文章目录 判断FTP连接 FTP文件上传 FTP文件下载 删除指定FTP文件 删除指定FTP文件夹 获取FTP上文件夹/文件列表 创建文件夹 获取指定FTP文件大小 更改指定FTP文件名称 移动指定F ...
- FastDFS上传下载删除操作
1.第一步 添加fastdfs-client.properties配置文件并修改 ## fastdfs-client.propertiesfastdfs.connect_timeout_in_seco ...
- Java操作ftp,上传,下载,删除操作
使用java commons net包中的api可以方便操作ftp操作. import java.io.File; import java.io.FileInputStream; import jav ...
最新文章
- [学习笔记]51单片机
- Ubuntu Linux 提出新的发布模式——测试周
- 多表利用DIH批量导入数据并建立索引注意事项
- 一个简单的状态机设计
- 关于使用代理解决跨域问题的原理
- mfc在运行的时候为什么没有实例化_Redis(7)——持久化【一文了解】
- pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……
- mac homebrew安装php5.3,mac mini brew安装了php54,但是我的工作php还是5.3.15?
- 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
- 如何安装JCreator
- 关于C语言全局变量定义和引用写法总结
- 腾讯笔试——安排机器 【 题目描述】小 Q 的公司最近接到 m 个任务, 第 i 个任务需要 xi 的时间去完成, 难度等级为 yi。 小 Q 拥有 n 台机器, 每台机器最长工作时间 zi, 机器等
- 如何解决运行Spark-shell,出现报错Unable to load native-hadoop library for your platform的问题
- 微信网页中点击图片放大
- python3下的webpy运行详解——webpy,session,cookie
- STM32F103xx OLED旋转显示图片
- RC滤波 电阻电容的损耗计算方法
- SQL SERVER全国行政区划 精确到区
- 2018全球互联网经济大会,春季峰会在南京开幕
- 客户第一 战略交流 | 数澜科技走进欧冶云商