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);
}
}