美文网首页
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