美文网首页
AWS S3文件服务器

AWS S3文件服务器

作者: 摩羯座李 | 来源:发表于2018-08-27 14:28 被阅读555次

最近公司用到亚马逊 s3文件服务器,在这里记录一下其使用过程。

1.AWS的创建和访问密钥,凭证的获取

在Java服务端中使用AWS SDK for Java前需要为它提供凭证,凭证从AWS个人账户中生成,每页账户的话,打开 AWS云服务进行注册,新增IAM用户并创建密钥。
详情请见[https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/signup-create-iam-user.html]

2.AWS SDK for Java的使用

POM中导入相关依赖

  <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.393</version>
    </dependency>

yaml配置文件中进行相应参数的配置,使用@Value注解获取数据


application.yml
AwsUtils.java

注意这里如果使用@value注解获取ymal中参数时,需要在类名前加@Component,调用该类时也需要使用@Autowired方式进行注入,而非new一个对象。
文件上传的实现:

    public AmazonS3 getS3() {
        AmazonS3 amazonS3 = new AmazonS3Client(new BasicAWSCredentials(this.AWS_ACCESS_KEY, this.AWS_SECRET_KEY));
        Region usWest2 = Region.getRegion(Regions.CN_NORTH_1);
        amazonS3.setRegion(usWest2);
        amazonS3.setEndpoint(this.ENDPOINT);
        return amazonS3;
    }

    /**
     * @param @param  tempFile 目标文件
     * @param @param  remoteFileName 文件名
     * @param @return
     * @param @throws IOException    设定文件
     * @return String    返回类型
     * @throws
     * @Title: uploadToS3
     * @Description: 将文件上传至S3上并且返回url
     */
    public  String uploadToS3(MultipartFile tempFile,String remoteFileName) throws IOException {
        s3 = getS3();
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(tempFile.getContentType());
        metadata.setContentLength(tempFile.getSize());
        String type = tempFile.getContentType().split("/")[0];
        remoteFileName = type+"/"+remoteFileName; //通过getContentType()获取文件类型并按照类型自动存放到相应文件夹中
        try {
            //上传文件
            s3.putObject(new PutObjectRequest(BUCKET_NAME,remoteFileName,tempFile.getInputStream(),metadata).withCannedAcl(CannedAccessControlList.PublicRead));
            //获取一个request
            GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
                    BUCKET_NAME, remoteFileName);
            //生成公用的url
            URL url = s3.generatePresignedUrl(urlRequest);
            System.out.println("URL:" + url);
            return url.toString();
        } catch (AmazonServiceException ase) {
            ase.printStackTrace();
        } catch (AmazonClientException ace) {
            ace.printStackTrace();
        }
        return null;
    }
    /**
     * c查找s3上名称为bucketName的Bucket里的所有对象
     *
     * @param amazonS3
     * @param bucketName
     * @return
     */
    public void getObjectList(){
        s3 = getS3();
        try{
            ObjectListing ol = s3.listObjects(BUCKET_NAME);
            List<S3ObjectSummary> objects = ol.getObjectSummaries();
            for (S3ObjectSummary os: objects) {
                System.out.println("* " + os.getKey());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

S3的中文说明文档在这里Amazon S3,记录一下,以后慢慢消化。

相关文章

网友评论

      本文标题:AWS S3文件服务器

      本文链接:https://www.haomeiwen.com/subject/qxpziftx.html