基于minio在本地做亚马逊AWS S3·云文件存储开发
minio启动 · minioスタット文件上传 · ファイルアップロード文件删除 · ファイル削除文件复制 · ファイルコッピ文件下载 · ファイルダウンロード自己写的S3工具类 · S3Utils
minio启动 · minioスタット
启动控制台,在minio文件目录下执行(复制以下代码)。 CMDをスタットして、minio目録の中には実行する。(コッピ)
minio.exe --compat --config-dir config server data/data/.minio.sys/config/config.json
文件上传 · ファイルアップロード
import software
.amazon
.awssdk
.services
.s3
.S3Client
;
import software
.amazon
.awssdk
.services
.s3
.model
.CopyObjectRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.DeleteObjectRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.GetObjectRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.GetObjectResponse
;
import software
.amazon
.awssdk
.services
.s3
.model
.PutObjectRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.S3Exception
;
@Autowired
private S3Client s3Client
;
File file
= new File("c:\\test.csv");
try (InputStream inputStream
= new FileInputStream(zipFile
)) {
this.fileSave(fileName
, inputStream
,bucketName
);
}
public void fileSave(String fileName
, InputStream inputStream
, String bucketName
) throws IOException
{
PutObjectRequest build
= PutObjectRequest
.builder().bucket(bucketName
).key(fileName
).build();
RequestBody fromInputStream
= RequestBody
.fromBytes(inputStream
.readAllBytes());
s3Client
.putObject(build
, fromInputStream
);
}
文件删除 · ファイル削除
s3Client
.deleteObject(DeleteObjectRequest
.builder()
.bucket(bucketName
)
.key(fileName
)
.build());
文件复制 · ファイルコッピ
String encode
= URLEncoder
.encode(bucketName
+ "/" + fileName
,
StandardCharsets
.UTF_8
.toString());
CopyObjectRequest copyObjectRequest
= CopyObjectRequest
.builder().copySource(encode
)
.destinationBucket(coypToBucketName
)
.destinationKey(copyTofile
).build();
s3Client
.copyObject(copyObjectRequest
);
文件下载 · ファイルダウンロード
public String
downloadFile(Model model、HttpServletResponse response
,
@AuthenticationPrincipal LoginUserDetails userDetails
) {
fileDownload(fileName
, response
,bucketName
);
return null
;
}
private void fileDownload(String fileName
, HttpServletResponse response
, String bucketName
) throws IOException
{
Boolean checkObject
= S3Utils
.s3FileCheck(fileName
, bucketName
, s3Client
);
if (fileName
!= null
&& checkObject
) {
response
.setCharacterEncoding("utf-8");
response
.setContentType("application/octet-stream");
response
.setHeader("Content-Disposition", "attachment;fileName="
+URLEncoder
.encode(fileName
, "UTF-8"));
ResponseInputStream
<GetObjectResponse> object
=s3Client
.getObject(GetObjectRequest
.builder()
.bucket(bucketName
)
.key(fileName
)
.build());
ServletOutputStream out
= response
.getOutputStream();
int len
= 0;
byte[] buffer
= new byte[1024];
while ((len
= object
.read(buffer
)) > 0) {
out
.write(buffer
, 0, len
);
}
out
.close();
object
.close();
log
.info("file Download: " + fileName
+ ",bucket: " + bucketName
);
return;
}
throw new FileNotFoundException("S3 File Not Found. Bucket: "
+ bucketName
+ " ,FileName: " + fileName
);
}
自己写的S3工具类 · S3Utils
import java
.util
.List
;
import java
.util
.Objects
;
import software
.amazon
.awssdk
.core
.sync
.RequestBody
;
import software
.amazon
.awssdk
.services
.s3
.S3Client
;
import software
.amazon
.awssdk
.services
.s3
.model
.Bucket
;
import software
.amazon
.awssdk
.services
.s3
.model
.CreateBucketRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.ListObjectsRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.ListObjectsResponse
;
import software
.amazon
.awssdk
.services
.s3
.model
.PutObjectRequest
;
import software
.amazon
.awssdk
.services
.s3
.model
.S3Object
;
public class S3Utils {
public static void putObjectForReader(String fileName
, String bucketName
, S3Client s3Client
, byte[] readAllBytes
) {
Boolean checkBucket
= true;
List
<Bucket> buckets
= s3Client
.listBuckets()
.buckets();
for (Bucket bucket
: buckets
) {
if (Objects
.equals(bucket
.name(), bucketName
)) {
checkBucket
= false;
break;
}
}
if (Boolean
.TRUE
.equals(checkBucket
)) {
s3Client
.createBucket(CreateBucketRequest
.builder()
.bucket(bucketName
)
.build());
}
PutObjectRequest putObjectRequest
= PutObjectRequest
.builder()
.bucket(bucketName
)
.key(fileName
)
.build();
RequestBody fromInputStream
= RequestBody
.fromBytes(readAllBytes
);
s3Client
.putObject(putObjectRequest
, fromInputStream
);
}
public static Boolean
s3FileCheck(String fileName
, String bucketName
, S3Client s3Client
) {
Boolean checkBucket
= false;
Boolean checkObject
= false;
String bucketTempName
= null
;
List
<Bucket> buckets
= s3Client
.listBuckets()
.buckets();
for (Bucket bucket
: buckets
) {
if (Objects
.equals(bucket
.name(), bucketName
)) {
bucketTempName
= bucket
.name();
checkBucket
= true;
break;
}
}
if (Boolean
.TRUE
.equals(checkBucket
)) {
ListObjectsRequest listObjectsRequest
= ListObjectsRequest
.builder()
.bucket(bucketTempName
)
.build();
ListObjectsResponse listObjects
= s3Client
.listObjects(listObjectsRequest
);
List
<S3Object> fileList
= listObjects
.contents();
for (S3Object s3Object
: fileList
) {
if (Objects
.equals(s3Object
.key(), fileName
)) {
checkObject
= true;
break;
}
}
}
return checkObject
;
}
private S3Utils() {
}
}