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

首先引入依赖

<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());
        }
    }
经验分享 程序员 微信小程序 职场和发展