amazonS3文件管理工具类

/**
 * @author huaxu
 * @create 2018/12/10
 * @since 1.0.0
 */
public class AmazonS3Manager {

	public static final Logger logger = LoggerFactory.getLogger(AmazonS3Manager.class);

	private static String AMAZON_ENDPOINT_URL;
	private static String AMAZON_AWS_ACCESS_KEY;
	private static String AMAZON_AWS_SECRET_KEY;

	static {

		try {
			AMAZON_ENDPOINT_URL = String.valueOf(PropertyConfigurerUtils.getPropertyValueByKey("amazon.endpoint.url"));
			AMAZON_AWS_ACCESS_KEY = String.valueOf(PropertyConfigurerUtils.getPropertyValueByKey("amazon.access.key"));
			AMAZON_AWS_SECRET_KEY = String.valueOf(PropertyConfigurerUtils.getPropertyValueByKey("amazon.secret.key"));

		} catch (Exception e) {
			logger.error("amazonS3文件服务器基础参数加载出错" + e.getMessage());
		}
		logger.info("amazonS3 文件服务器基础参数加载完成 access_key="+AMAZON_AWS_ACCESS_KEY + " endpoint_url="+AMAZON_ENDPOINT_URL);
	}


	/**
	 * 初始化连接,每次使用需要重新连接
	 */
	public static AmazonS3 initAmazonS3(){

		AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials(AMAZON_AWS_ACCESS_KEY, AMAZON_AWS_SECRET_KEY));
		s3.setRegion(Region.getRegion(Regions.CN_NORTH_1));
		s3.setEndpoint(AMAZON_ENDPOINT_URL);
		s3.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).build());
		return s3;
	}

	/**
	 * 上传文件
	 * @param bucketName 桶名
	 * @param tempFile	待上传文件
	 * @param remoteFileName 文件名
	 * @return
	 */
	public static boolean uploadToS3(String bucketName, File tempFile, String remoteFileName, CannedAccessControlList fileType) {

		try {
			AmazonS3 s3 = initAmazonS3();

			if(!s3.doesBucketExistV2(bucketName)){
				s3.createBucket(bucketName);
			}
			s3.putObject(new PutObjectRequest(bucketName, remoteFileName, tempFile).withCannedAcl(fileType));
			return true;
		} catch (Exception ase) {
			logger.error("amazonS3上传文件File模式异常 " + ase.getMessage(), ase);
		}
		return false;
	}

	/**
	 * 上传文件
	 * @param bucketName 桶名
	 * @param multipartFile 待上传文件
	 * @param remoteFileName 文件名
	 * @return
	 */
	public static boolean uploadToS3(String bucketName, CommonsMultipartFile multipartFile, String remoteFileName, CannedAccessControlList fileType) {

		InputStream in = null;
		try {
			AmazonS3 s3 = initAmazonS3();
			in = multipartFile.getInputStream();
			FileItem fileItem = multipartFile.getFileItem();

			if(!s3.doesBucketExistV2(bucketName)){
				s3.createBucket(bucketName);
			}
			ObjectMetadata omd = new ObjectMetadata();
			omd.setContentType(fileItem.getContentType());
			omd.setContentLength(fileItem.getSize());
			omd.setHeader("filename", fileItem.getName());

			s3.putObject(new PutObjectRequest(bucketName, remoteFileName, in, omd).withCannedAcl(fileType));
			return true;

		} catch (Exception ase) {
			logger.error("amazonS3上传文件InputStream模式异常 " + ase.getMessage(), ase);

		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					logger.error("amazonS3上传文件 关闭InputStream流异常 " + e.getMessage(), e);
				}
			}
		}
		return false;
	}



	/**
	 * 下载文件
	 * @param bucketName	桶名
	 * @param remoteFileName	文件名
	 * @param path	下载路径
	 */
	public static boolean downFromS3(String bucketName, String remoteFileName, String path) {
		try {
			AmazonS3 s3 = initAmazonS3();

			GetObjectRequest request  = new GetObjectRequest(bucketName,remoteFileName);
			s3.getObject(request,new File(path));
			return true;
		} catch (Exception ase) {
			logger.error("amazonS3下载文件异常 " + ase.getMessage(), ase);
		}
		return false;
	}


	/**
	 * 删除文件
	 * @param bucketName	桶名
	 * @param remoteFileName	待删除文件名
	 * @throws IOException
	 */
	public static void delFromS3(String bucketName, String remoteFileName) {
		try {
			AmazonS3 s3 = initAmazonS3();
			s3.deleteObject(bucketName, remoteFileName);
		} catch (Exception ase) {
			logger.error("amazonS3删除文件异常 " + ase.getMessage(), ase);
		}
	}





	/**
	 * 获取短链接 带过期时间
	 * @param bucketName	桶名称
	 * @param remoteFileName	文件名称
	 * @param expiration	过期时间/秒
	 */
	public static String getUrlFromS3(String bucketName, String remoteFileName, int expiration) {
		try {
			AmazonS3 s3 = initAmazonS3();
			GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);
			httpRequest.setExpiration(new Date(new Date().getTime() + expiration * 1000));

			URL url = s3.generatePresignedUrl(httpRequest);
			return String.valueOf(url);
		} catch (Exception e) {
			logger.error("amazonS3获取临时链接异常 " + e.getMessage(), e);
		}
		return null;
	}

	/**
	 * 获取永久链接
	 * @param bucketName	桶名称
	 * @param remoteFileName	文件名称
	 */
	public static String getUrlFromS3(String bucketName, String remoteFileName) {

		String url = "";
		try {
			AmazonS3 s3 = initAmazonS3();
			GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);

			url = String.valueOf(s3.generatePresignedUrl(urlRequest)).split("\\?")[0];
			if (url.indexOf(remoteFileName) == -1) {
				throw new RuntimeException("url文件名称校验不合法");
			}
			return url;

		} catch (Exception e) {
			logger.error("amazonS3获取永久链接异常 " + e.getMessage(), e);
			return "";
		}
	}

	public static AmazonS3 getS3(){
		return initAmazonS3();
	}

	/**
	 * 根据桶名称获取文件集合
	 */
	public static List<S3ObjectSummary> getFileMsgByBucketName(String bucketName){
		AmazonS3 s3 = initAmazonS3();
		ObjectListing objectListing = s3.listObjects(bucketName);
		List<S3ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
		return objectSummaries;
	}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值