import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import org.springframework.web.multipart.MultipartFile;
import com.cetcnav.lbs.base.util.CommonUtils;
import com.cetcnav.lbs.base.util.DateUtil;
import com.cetcnav.lbs.pis.ws.RestResponse;
import com.cetcnav.lbs.pis.ws.WsResponse.ResultCode;
import io.minio.BucketExistsArgs;
import io.minio.GetObjectArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.StatObjectArgs;
import io.minio.StatObjectResponse;
import io.minio.errors.MinioException;
public class MinioUtils {
public static RestResponse uploadFile(InputStream source, String targetName)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
RestResponse response = new RestResponse();
try {
String endpoint = MinIOPropertiesUtils.getString("minio.endpoint");
String accessKey = MinIOPropertiesUtils.getString("minio.accessKey");
String secretKey = MinIOPropertiesUtils.getString("minio.secretKey");
String bucketName = MinIOPropertiesUtils.getString("bucket.name");
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey)
.build();
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("Bucket " + bucketName + " already exists.");
}
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(targetName)
.stream(source, source.available(), -1).build());
response.setCode(ResultCode.SUCCESS);
response.setMessage("上传成功");
response.setData("/" + bucketName + "/" + targetName);
} catch (MinioException e) {
System.out.println("Error occurred: " + e.toString());
response.setCode(ResultCode.ERROR);
response.setMessage("上传失败");
}
return response;
}
public static RestResponse uploadFiles(String departmentCode, String identityCard, MultipartFile[] files) {
RestResponse response = new RestResponse();
StringBuffer targetUrl = new StringBuffer();
try {
StringBuffer targetName = new StringBuffer(MinIOPropertiesUtils.getString("bucket.visitorMaterial"));
targetName.append(departmentCode + "/");
targetName.append(DateUtil.date2Str(DateUtil.getCurrentTime(), "yyyy") + "/");
targetName.append(DateUtil.date2Str(DateUtil.getCurrentTime(), "MM") + "/");
targetName.append(DateUtil.date2Str(DateUtil.getCurrentTime(), "dd") + "/");
targetName.append(identityCard);
for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i];
InputStream sourceStream = file.getInputStream();
StringBuffer targetFile = new StringBuffer();
targetFile.append(targetName);
targetFile.append(CommonUtils.UNDERLINE + (i + 1));
targetFile.append(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
RestResponse res = MinioUtils.uploadFile(sourceStream, targetFile.toString());
if (res.getCode() == ResultCode.SUCCESS) {
targetUrl.append(res.getData());
if (i < files.length - 1) {
targetUrl.append(";");
}
}
if (res.getCode() == ResultCode.ERROR) {
response.setCode(ResultCode.ERROR);
response.setMessage("上传失败");
return response;
}
}
response.setCode(ResultCode.SUCCESS);
response.setMessage("上传成功");
response.setData(targetUrl);
} catch (Exception e) {
response.setCode(ResultCode.ERROR);
response.setMessage("上传失败");
}
return response;
}
public static InputStream downloadFile(String fileUrl) {
InputStream stream = null;
RestResponse response = new RestResponse();
try {
String endpoint = MinIOPropertiesUtils.getString("minio.endpoint");
String accessKey = MinIOPropertiesUtils.getString("minio.accessKey");
String secretKey = MinIOPropertiesUtils.getString("minio.secretKey");
String bucketName = MinIOPropertiesUtils.getString("bucket.name");
String fileName = (fileUrl.split(bucketName))[1];
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey)
.build();
StatObjectResponse objectStat = minioClient
.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
if (objectStat == null) {
response.setCode(ResultCode.ERROR);
response.setMessage("文件不存在");
return null;
}
stream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
} catch (Exception e) {
response.setCode(ResultCode.ERROR);
response.setMessage("文件不存在");
}
return stream;
}
public static byte[] downloadFileToByte(String fileUrl) {
InputStream stream = null;
RestResponse response = new RestResponse();
try {
String endpoint = MinIOPropertiesUtils.getString("minio.endpoint");
String accessKey = MinIOPropertiesUtils.getString("minio.accessKey");
String secretKey = MinIOPropertiesUtils.getString("minio.secretKey");
String bucketName = MinIOPropertiesUtils.getString("bucket.name");
String fileName = (fileUrl.split(bucketName))[1];
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey)
.build();
StatObjectResponse objectStat = minioClient
.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
if (objectStat == null) {
response.setCode(ResultCode.ERROR);
response.setMessage("文件不存在");
return null;
}
stream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n = 0;
while (-1 != (n = stream.read(buffer))) {
os.write(buffer, 0, n);
}
stream.close();
return os.toByteArray();
} catch (Exception e){
response.setCode(ResultCode.ERROR);
response.setMessage("文件不存在");
return null;
}
}
}