赞
踩
首先下载所需要的包
<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的一些方法
转载请注明地址~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。