亚马逊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()); } }
下一篇:
java虚拟机直接内存介绍