AWS S3文件服務(wù)器

最近公司用到亞馬遜 s3文件服務(wù)器,在這里記錄一下其使用過程。

1.AWS的創(chuàng)建和訪問密鑰,憑證的獲取

在Java服務(wù)端中使用AWS SDK for Java前需要為它提供憑證,憑證從AWS個(gè)人賬戶中生成,每頁賬戶的話,打開 AWS云服務(wù)進(jìn)行注冊,新增IAM用戶并創(chuàng)建密鑰。
詳情請見[https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/signup-create-iam-user.html]

2.AWS SDK for Java的使用

POM中導(dǎo)入相關(guān)依賴

  <!-- 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配置文件中進(jìn)行相應(yīng)參數(shù)的配置,使用@Value注解獲取數(shù)據(jù)


application.yml

AwsUtils.java

注意這里如果使用@value注解獲取ymal中參數(shù)時(shí),需要在類名前加@Component,調(diào)用該類時(shí)也需要使用@Autowired方式進(jìn)行注入,而非new一個(gè)對象。
文件上傳的實(shí)現(xiàn):

    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 目標(biāo)文件
     * @param @param  remoteFileName 文件名
     * @param @return
     * @param @throws IOException    設(shè)定文件
     * @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()獲取文件類型并按照類型自動(dòng)存放到相應(yīng)文件夾中
        try {
            //上傳文件
            s3.putObject(new PutObjectRequest(BUCKET_NAME,remoteFileName,tempFile.getInputStream(),metadata).withCannedAcl(CannedAccessControlList.PublicRead));
            //獲取一個(gè)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,記錄一下,以后慢慢消化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容