赞
踩
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 "上传文件不能为空!";
- }
- //文件大小限制,最大单文件20M
- if(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转为File
- File 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);
- }
- }
-
- }

如觉得对你有帮助,请记得点个赞,个人整理不易....
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。