zoukankan      html  css  js  c++  java
  • 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;
    	}
    }
    

      

    每天学习一点点,你就进步一点点。
  • 相关阅读:
    文件IO学习
    简单哈希表学习
    关于二叉树的遍历
    关于多点共线问题
    关于线程
    时间复杂度O()与KMP算法
    单链表相关
    拷贝构造函数与深浅拷贝
    在windows把python写成bat文件的坑
    python学习手册:第二十五章——oop
  • 原文地址:https://www.cnblogs.com/zhangliang88/p/15428766.html
Copyright © 2011-2022 走看看