亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼

 更新時(shí)間:2020年10月27日 09:14:47   作者:白42  
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下

簡(jiǎn)單記錄一下在Springboot中上傳文件到AWS S3存儲(chǔ)服務(wù)的代碼。

application.xml中添加aws相關(guān)配置:

custom:
  aws:
    access-key: CHOBITACCESSKEY
    secret-key: CHOBIT/THISIS006SECRET007Key/dotORG
    bucket: zhyea
    endpoint: www.zhyea.com:80

新建一個(gè) AwsS3Componment類(lèi)來(lái)執(zhí)行上傳文件操作:

@Component
public class AwsS3Component implements InitializingBean {
 
    @Value("${custom.aws.access-key}")
    private String accessKey;
 
    @Value("${custom.aws.secret-key}")
    private String accessSecret;
 
    @Value("${custom.aws.bucket}")
    private String bucket;
 
    @Value("${custom.aws.endpoint}")
    private String endpoint;
 
    private AmazonS3 client;
 
 
    @Override
    public void afterPropertiesSet() {
        ClientConfiguration config = new ClientConfiguration();
        config.setProtocol(Protocol.HTTP);
        config.disableSocketProxy();
 
        this.client = AmazonS3ClientBuilder
                .standard()
                .withClientConfiguration(config)
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, accessSecret)))
                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, Regions.CN_NORTH_1.getName()))
                .enablePathStyleAccess()
                .build();
    }
}

因?yàn)槭褂玫姆?wù)有設(shè)置endpoint,所以這里需要使用下面這一行完成endpoint的設(shè)置:

withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, Regions.CN_NORTH_1.getName()))

如果不設(shè)置endpoint就會(huì)收到下面這樣的報(bào)錯(cuò):

com.amazonaws.services.s3.model.AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: FRDT8N0RAQFNCVDP; S3 Extended Request ID: DemEatwroXry2YN/5lyuMKDmhIi/aIz3QZPmLN0DYHeHU3oGUeOClJBcToz1J1qkcBZBfklRNs8=)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701)

異常信息中提示了AccessKey無(wú)效——雖然我的AccessKey是有效的。

在endpoint的這行配置中還設(shè)置了region信息。如果不需要設(shè)置endpoint,就得補(bǔ)上region的配置:

this.client = AmazonS3ClientBuilder
        .standard()
        .withClientConfiguration(config)
        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, accessSecret)))
        .withRegion(Regions.CN_NORTH_1) //Region配置
        .enablePathStyleAccess()
        .build();

下面是執(zhí)行上傳的代碼:

/**
 * 執(zhí)行文件上傳
 *
 * @param file 要上傳的文件的路徑
 * @param key  存儲(chǔ)文件的路徑
 * @return 文件路徑
 */
private String upload(File file, String key) {
    client.putObject(new PutObjectRequest(bucket, key, file).withCannedAcl(CannedAccessControlList.PublicRead));
    GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, key);
    URL url = client.generatePresignedUrl(urlRequest);
    return url.toString();
}

這里是通過(guò) File實(shí)例執(zhí)行的上傳。有時(shí)候會(huì)需要直接通過(guò)文件流執(zhí)行上傳,此時(shí)可以使用下面的代碼:

private String upload(InputStream input, String key) throws IOException {
    Date expireDate = new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(30));
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setHttpExpiresDate(expireDate);
    metadata.setContentLength(input.available());
 
    client.putObject(new PutObjectRequest(bucket, key, input, metadata).withCannedAcl(CannedAccessControlList.PublicRead));
    GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, key);
    URL url = client.generatePresignedUrl(urlRequest);
    return url.toString();
}

注意這里的 setContentLength()最好配置一下。不設(shè)置會(huì)在處理的時(shí)候給出WARN。根據(jù)方法文檔也可以看到,如果不設(shè)置,在上傳的時(shí)候就會(huì)先在內(nèi)存中緩存整個(gè)信息流來(lái)計(jì)算文件長(zhǎng)度。

大體上就是這樣了。

End!

以上就是SpringBoot實(shí)現(xiàn)上傳文件到AWS S3的代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 上傳文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論