AWS实战(一)之Java连接AWS的S3,实现数据上传

2 篇文章 0 订阅
2 篇文章 0 订阅

准备:

a. 假设你已经拿到可以访问S3 的IAM用户的 [access_key_id,secret_key_id]

b. 确保你的s3存储桶能被你的IAM用户访问

编码:

1 .  实例化一个提供AWSCredentials接口的类, 为该类提供用于连接的AWS访问密钥和私有密钥
2.   使用AWSCredentials对象创建AWSStaticCredentialsProvider
3.使用AWSStaticCredentialsProvider配置客户端生成器并构建客户端

public class S3Controller {
    
    private static String access_key_id = "***********";
    private static String secret_key_id = "**************************";
    private static String bucketName = "存储桶的名称";
    private static AmazonS3 s3Client;
    static {        
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(access_key_id, secret_key_id);
        s3Client = AmazonS3Client.builder()
                .withRegion("cn-north-1") //北京区
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .build();
    }

// 以文件的方式向S3中上传    

public static String upload(File tempFile, String remoteFileName) {
        
        String bucketPath = bucketName + "/upload" ;
        s3Client.putObject(new PutObjectRequest(bucketPath, remoteFileName, tempFile)
                .withCannedAcl(CannedAccessControlList.PublicRead));
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);
        URL url = s3Client.generatePresignedUrl(urlRequest);
        return url.toString();
    
    }

//这里是为了模拟字符串直接上到s3中,以byte的形式
    public static String upload01(File tempFile, String remoteFileName) {
        byte[] buf = "123".getBytes();
        InputStream stream = new ByteArrayInputStream(buf);
        ObjectMetadata metadata = new ObjectMetadata();

        //由于S3的存储相同路径的提交文件时覆盖操作,这里可以加入自定的文件路径创建规则
        String bucketPath = bucketName + "/upload" ;
        s3Client.putObject(new PutObjectRequest(bucketPath, remoteFileName, stream,metadata)
                .withCannedAcl(CannedAccessControlList.PublicRead));
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);
        URL url = s3Client.generatePresignedUrl(urlRequest);
        System.out.println(url.toString());
        return url.toString();
    }
 
    public static void main(String[] args) {
        
         File uploadFile = new File("D:\\Hello.txt");
         String uploadKey = "hello";
         upload(uploadFile,uploadKey);
         upload01(uploadFile,uploadKey);
        
    }
}

注意 :S3 的存储(类似网盘)每次的请求对他来说都是一个文件,不支持文件追加的操作(可能支持,但是我没调查到,有大佬知道,请私信,感谢)且按照aws的收费标准每 1000 个请求 ¥0.00405,综合我们的业务场景将S3当作数据库的操作实在太奢侈了,故我们考虑引入Kinesis Data Firehose (吐槽一句只要用了一个aws的产品,就别想离开了,人家给你准备了一堆解决方案,一个字 “ 钱 ”...)将所有的请求发往Firehose,在Firehose的控制台(https://console.amazonaws.cn/kinesis)创建 Data Firehose 并设定 S3 缓冲条件设置 分别设定 缓存大小和时间间隔,(官方文档有操作步骤,但是需要注意权限,aws的有严格的权限管理机制,Kinesis Data Firehose 的连接代码见下篇)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值