文档章节

aws S3 util demo

经常把天聊死的胖子
 经常把天聊死的胖子
发布于 11/16 12:11
字数 798
阅读 12
收藏 0
package com.example.demo;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Objects;

/**
 * @author seif
 * @Description: TODO
 * @date 2018/7/3011:47
 * @Modified by:
 */
@Component
public class S3ServiceUtils {

    /**
     * 测试使用
     */

    static AmazonS3 s3Client;
    private static final String AWS_ACCESS_KEY = "";
    private static final String AWS_SECRET_KEY = "";
    private static final String pubBucket = "www.XXX.com";
    private static final String priBucket = "XXX-inner";

    static {
        //创建s3client
        s3Client = new AmazonS3Client(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY));
        //根据自己s3的区域进行选择
        Region usWest2 = Region.getRegion(Regions.AP_NORTHEAST_1);
        s3Client.setRegion(usWest2);
    }

    /**
     * 配置文件使用
     *
     * @return
     */
//    private static String AWS_ACCESS_KEY;
//    private static String AWS_SECRET_KEY;
//    private static String pubBucket;
//    private static String priBucket;
//
//    @Value("${aws.ACCESS_KEY}")
//    public void setAwsAccessKey(String awsAccessKey) {
//        AWS_ACCESS_KEY = awsAccessKey;
//    }
//
//    @Value("${aws.SECRET_KEY}")
//    public void setAwsSecretKey(String awsSecretKey) {
//        AWS_SECRET_KEY = awsSecretKey;
//    }
//
//    @Value("${aws.BUCKET_NAME_WEB}")
//    public void setpubBucket(String bucket) {
//        pubBucket = bucket;
//    }
//
//    @Value("${aws.BUCKET_NAME_INNER}")
//    public void setpriBucket(String bucket) {
//        priBucket = bucket;
//    }
//
//    @PostConstruct
//    public void init() {
//        s3Client = new AmazonS3Client(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY));
//        Region usWest2 = Region.getRegion(Regions.AP_NORTHEAST_1);
//        s3Client.setRegion(usWest2);
//    }

    /**
     * 判断S3Client是否创建好
     *
     * @return
     */
    public static boolean isReady() {
        return s3Client.listBuckets().size() > 0;
    }

    /**
     * 上传文件
     *
     * @param tempFile 需要上传的文件
     * @param key      需要上传文件的key,自定义
     * @param isHide   使用buket区分
     * @return
     * @throws IOException
     */
    public static String uploadToS3(File tempFile, String key, boolean isHide) throws IOException {
        try {
            if (checkExists(key, isHide)) {
                delFromS3(key, isHide);
            }
            String bucketName = isHide ? priBucket : pubBucket;
            //上传文件
            s3Client.putObject(new PutObjectRequest(bucketName, key, tempFile).withCannedAcl(CannedAccessControlList.PublicRead));
            //获取一个request
            GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
                    bucketName, key);
            //生成公用的url
            URL url = s3Client.generatePresignedUrl(urlRequest);

            return url.toString();

            //一般根据业务需求返回下列结果
//            if (isHide) {
//                return key;
//            } else {
//                url = new URL("https://" + bucketName + "/" + key);
//                return url.toString();
//            }

        } catch (AmazonServiceException ex) {
            ex.printStackTrace();
        } catch (AmazonClientException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 上传文件
     *
     * @param input
     * @param key
     * @param isHide
     * @return
     * @throws IOException
     */
    public static String uploadToS3ByInput(InputStream input, String key, boolean isHide) throws IOException {
        try {
            if (checkExists(key, isHide)) {
                delFromS3(key, isHide);
            }
            String bucketName = isHide ? priBucket : pubBucket;
            //上传文件
            s3Client.putObject(new PutObjectRequest(bucketName, key, input, null).withCannedAcl(CannedAccessControlList.PublicRead));
            //获取一个request
            GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
                    bucketName, key);
            //生成公用的url
            URL url = s3Client.generatePresignedUrl(urlRequest);
            if (isHide) {
                return key;
            } else {
                url = new URL("https://" + bucketName + "/" + key);
                return url.toString();
            }

        } catch (AmazonServiceException ex) {
            ex.printStackTrace();
        } catch (AmazonClientException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 检查key是否存在
     *
     * @param key
     * @param isHide
     * @return
     */
    public static boolean checkExists(String key, boolean isHide) {
        try {
            String bucketName = isHide ? priBucket : pubBucket;
            S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
            if (object != null && object.getObjectContent() != null) {
                object.close();
                return true;
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }

    /**
     * 获取内容
     *
     * @param key
     * @param isHide
     * @return
     * @throws IOException
     */
    public static S3ObjectInputStream getContentFromS3(String key, boolean isHide) throws IOException {
        try {
            String bucketName = isHide ? priBucket : pubBucket;
            GetObjectRequest request = new GetObjectRequest(bucketName, key);
            S3Object object = s3Client.getObject(request);
            S3ObjectInputStream inputStream = object.getObjectContent();
            return inputStream;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }

    }


    /**
     * 下载内容
     *
     * @param key
     * @param path
     * @param isHide
     * @throws IOException
     */
    public static void downFromS3(String key, String path, boolean isHide) throws IOException {
        try {
            String bucketName = isHide ? priBucket : pubBucket;
            GetObjectRequest request = new GetObjectRequest(bucketName, key);
            s3Client.getObject(request, new File(path));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 获取url
     *
     * @param key
     * @param isHide
     * @return
     * @throws IOException
     */
    public static String getUrlFromS3(String key, boolean isHide) throws IOException {
        try {
            String bucketName = isHide ? priBucket : pubBucket;
            GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(bucketName, key);
            String url = s3Client.generatePresignedUrl(httpRequest).toString();//临时链接
            return url;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 验证s3上是否存在名称为bucketName的Bucket
     *
     * @param bucketName
     * @return
     */
    public static boolean checkBucketExists(String bucketName) {
        List<Bucket> buckets = s3Client.listBuckets();
        for (Bucket bucket : buckets) {
            if (Objects.equals(bucket.getName(), bucketName)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 删除key
     *
     * @param key
     * @param isHide
     * @throws IOException
     */
    public static void delFromS3(String key, boolean isHide) throws IOException {
        try {
            String bucketName = isHide ? priBucket : pubBucket;
            s3Client.deleteObject(bucketName, key);
        } catch (AmazonServiceException ex) {
            ex.printStackTrace();
        } catch (AmazonClientException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        String key = "test";
        System.out.println(isReady());
        File tempFile = new File("C:\\Users\\user\\Desktop\\qw.jpg");
        String url = uploadToS3(tempFile, key, false);//上传文件
//        String url = getUrlFromS3(key, false);//获取文件的url
        System.out.println(url);
//        delFromS3(key, false);//删除文件
    }
}

 

比较懒,所以懒得找jar包了,就这样吧,虽然会多出来一堆jar包

compile group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.347'

 

© 著作权归作者所有

上一篇: ali oss util demo
下一篇: 运维demo
经常把天聊死的胖子
粉丝 0
博文 46
码字总数 19285
作品 0
嘉定
程序员
私信 提问
How to connect an Ionic Angular application to AWS

TL;DR Since Ionic is powered by Angular, this will hold true for any Angular application, and you will be able to use this knowledge in any Angular web application with minimal ......

Nikola Breznjak
2017/12/26
0
0
Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3

说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件下载到本地local,和下载到AWS S3中。用到的文件库filesystem主要是:league/flysys...

botkenni
2016/10/24
15
0
快速开始使用Spark和Alluxio

原文[英]:http://www.alluxio.com/2016/04/getting-started-with-alluxio-and-spark/ 简介 Alluxio是一个基于内存的分布式文件系统,它是架构在底层分布式文件系统和上层分布式计算框架之间...

openthings
2016/06/16
628
0
Java 上传文件用s3上传文件到aws对象存储中报Resetting to invalid mark 哪位大牛可以帮忙看看

java.io.IOException: Resetting to invalid mark at java.io.BufferedInputStream.reset(BufferedInputStream.java:448) ~[?:1.8.0_51] at com.amazonaws.internal.SdkBufferedInputStream.......

浮尘一梦
08/08
216
3
使用 AWS SNS 发送通知到 HTTP 终端

作者: Angus.Fenying i.am.x.fenying@gmail.com 日期: 2016-08-27 05:46 PM AWS 的 SNS 是一个消息推送服务,通过 SNS,可以将 AWS 的其他服务(如 S3)的事件消息转发给其它终端(E-Mail,H...

Fenying
2016/09/15
34
0

没有更多内容

加载失败,请刷新页面

加载更多

Flask框架web开发:零基础入门

Flask框架是Python开发的一个基于Werkzeug和Jinja 2的web开发微框架,它的优势就是极其简洁,但又非常灵活,而且容易学习和应用。因此Flask框架是Python新手快速开始web开发最好的选择,此外...

笔阁
4分钟前
0
0
VMware前路难测,多个厂家群雄逐鹿

在人们高谈Salesforce、亚马逊等新兴云计算厂商取得的成就时,以VMware、HPE和Cisco为代表的老牌厂商也在进行着自己的转型和变化,而且还取得一定的进展。以VMware为例,虚拟机巨头公布了第二...

linuxCool
7分钟前
0
0
什么是以太坊DAO?(一)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 “在区块链上,没有人知道你是一台冰箱”——理查德布朗 到目前为止,我们列出的所有...

geek12345
8分钟前
0
0
linux防火墙操作

一、.对于centos7自带的防火墙的相关指令 #停止firewall systemctl stop firewalld.service #禁止firewall开机启动 systemctl disable firewalld.service #查看firewall的状态 systemctl st......

张锦飞
11分钟前
0
0
Linux 磁盘与磁盘分区

  Linux 系统中所有的硬件设备都是通过文件的方式来表现和使用的,我们将这些文件称为设备文件,硬盘对应的设备文件一般被称为块设备文件。本文介绍磁盘设备在 Linux 系统中的表示方法以及...

SEOwhywhy
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部