亚马逊S3Client实现上传下载功能

本文介绍如何使用AWS SDK for Java实现S3存储桶中的文件上传、下载及移动操作,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先引入依赖

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
            <version>2.18.8</version>
        </dependency>

上传下载

  /**
   * 上传文件
  */
public File uploadFile(MultipartFile multipartFile, String location) {
        try {
            S3Client s3Client = getS3Client();
            s3Client.putObject(PutObjectRequest
                            .builder()
                            .bucket(bucketName)
                            .key(location + "/" + multipartFile.getOriginalFilename())
                            .contentLength(multipartFile.getSize())
                            .contentType(multipartFile.getContentType())
                            .build()
                    , RequestBody.fromBytes(multipartFile.getBytes()));
        } catch (Exception e) {
            log.error("s3Client上传文件File模式异常 " + e.getMessage(), e);
        }
        return file;

    }
/*
*下载
*/
 public byte[] getDownloadFile(String bucketName, String key) {
        S3Client s3Client = getS3Client();
        ResponseBytes<GetObjectResponse> responseBytes = s3Client.getObjectAsBytes(GetObjectRequest.builder().bucket(bucketName).key(key).build());
        return responseBytes.asByteArray();
    }


// 获取连接
 public static S3Client getS3Client() {
        return S3Client.builder()
                .region(Region.AP_SOUTHEAST_1)
                .credentialsProvider(new AwsCredentialsProvider() {
                    @Override
                    public AwsCredentials resolveCredentials() {
                        return AwsBasicCredentials.create(accessKey, secretKey);
                    }
                })
                .build();
    }


 /**
     * 文件移动
     * @param searchFolder 源文件地址
     * @param bakFolder  新地址前一个文件夹
     * @param downloadFileName 文件名
     * @param rootFolder 新地址
     */
    public void moveFileToDir(String searchFolder,String bakFolder, String downloadFileName, String rootFolder) {
        S3Client s3Client = getS3Client();
        String oldPath = searchFolder + downloadFileName;
        String newPath = searchFolder + bakFolder + "/" + rootFolder + "/" + downloadFileName;
        s3Client.copyObject(CopyObjectRequest.builder().sourceBucket(bucketName).sourceKey(oldPath)
                .destinationBucket(bucketName).destinationKey(newPath).build());
        // 判断转移文件成功就删除旧位置
        ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(
                ListObjectsV2Request.builder()
                        .bucket(bucketName).prefix(newPath).build());
        List<S3Object> contents = listObjectsV2Response.contents();
        if (CollectionUtil.isNotEmpty(contents)) {
            s3Client.deleteObject(DeleteObjectRequest.builder().bucket(bucketName).key(searchFolder + downloadFileName).build());
        }
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值