使用AWS S3 JavaSDK连接私有S3节点

AWS 提供多语言SDK连接S3存储服务,本文主要描述使用JavaSDK连接私有S3节点

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


public class aws {

	
	private static final String ACCESS_KEY = "xxxx";//access_key_id 你的亚马逊S3服务器访问密钥ID
	
	private static final String SECRET_KEY = "xxxx";//secret_key 你的亚马逊S3服务器访问密钥
    private static final String END_POINT = "https://xxton.s3-cn-north-1.amazonaws.com";//私有s3节点的地址
	private static final String BUCKET_NAME = "xxxx";//你的亚马逊S3服务器创建的桶名 也可以通过listbucket获取
	private static final BasicAWSCredentials awsCreds = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);//创建访问凭证对象
	private static final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
			.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
			// 设置服务器所属地区
			.withRegion(Regions.CN_NORTH_1).build();

	/**
	 * 上传文件示例
	 * @param uploadPath 上传路径
	 */
	private static String uploadFile(File file, String uploadPath) {
		try {
			if (file == null) {
				return null;
			}
			// 设置文件目录
			if (StringUtils.isNotEmpty(uploadPath)) {
				uploadPath = "/".equals(uploadPath.substring(uploadPath.length() - 1)) ? uploadPath : uploadPath + "/";
			} else {
				uploadPath = "default/";
			}
			// 生成随机文件名
			String expandedName = file.getName().substring(file.getName().lastIndexOf("."));
			String key = uploadPath + UUID.randomUUID().toString() + expandedName;
			// 设置文件上传对象
			PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, key, file);
			// 设置公共读取
			request.withCannedAcl(CannedAccessControlList.PublicRead);
			// 上传文件
			PutObjectResult putObjectResult = s3.putObject(request);
			if (null != putObjectResult) {
				return key;
			}
			return null;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取文件下载路径
	 * 
	 * @param key 文件的key
	 * @return
	 */
	private static String downloadFile(String key) {
		try {
			if (StringUtils.isEmpty(key)) {
				return null;
			}
			GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(BUCKET_NAME, key);
			return s3.generatePresignedUrl(httpRequest).toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
    /*
    *创建bucket
    */
	private static String create_bucket(String bucket_name) {
		Bucket resp = s3.createBucket(bucket_name);
		String bucket = resp.getName();
		return bucket;
	}
     /*
    *删除bucket
    */
	private static void remove_bucket(String bucket_name) {
		s3.deleteBucket(bucket_name);
	}
     /*
    *获取bucket列表
    */
	private static List listbuckets() {
		List<String> buckets = new ArrayList<String>();
		List<Bucket> resp = s3.listBuckets();
		for (int i = 0; i < resp.size(); i++) {
			String bucket = resp.get(i).getName();
			buckets.add(bucket);
		}
		return buckets;

	}
     /*
    *获取某个bucket中存储文件的列表
    */
	private static List listObject(String bucket_name) {
		List <String> objects = new ArrayList<String>();
		ObjectListing resp = s3.listObjects(bucket_name);
		List  object_summary = resp.getObjectSummaries();
		
		for (int i =  0;i<object_summary.size();i++) {
			String object_name = object_summary.get(i).toString();
			objects.add(object_name);
		}
		return objects;
		
	}
	 /*
    *删除bucket 中的文件
    */
	private static void delete_object(String bucket_name,String object_name) {
		s3.deleteObject(bucket_name, object_name);
		
	}

	public static void main(String[] args) {
        //遍历所有文件
		List <String>bucekts = listbuckets();
		for(int i =  0;i<bucekts.size();i++) {
			String bucket = bucekts.get(i);
			List<String> objects = listObject(bucekts.get(i)); 
			for(int j = 0;j < objects.size();j++) {
				String object_name = objects.get(j);
				System.out.println(object_name);
			}
		}
		
			
		
		
//		
//		// 上传文件测试
//		File file = new File("D:\\test.jpg");
//		String filePath = uploadFile(file, "upload/");
//		System.out.println("【文件上传结果】:" + filePath);
//		System.out.println("\n");
//		// 下载文件测试
//		String downUrl = downloadFile(filePath);
//		System.out.println("【下载文件路径】:" + downUrl);
	}

}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值