引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
配置文件
minio:
end-point: http://localhost:9000
access-key: minioadmin
secret-key: minioadmin
工具类
import com.google.common.io.ByteStreams;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
@Component
@Setter
@Getter
public class MinIoUtils {
@Value("${minio.end-point}")
private String endPoint;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
static MinioClient minioClient;
@PostConstruct
public void initClient() {
minioClient = MinioClient.builder()
.endpoint(endPoint)
.credentials(accessKey, secretKey)
.build();
}
public static List<String> findFiles(String bucket) {
try {
BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucket).build();
boolean found = minioClient.bucketExists(bucketExistsArgs);
if (found) {
ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder()
.bucket(bucket)
.recursive(true).build();
Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs);
List<String> files = new ArrayList<>();
for (Result<Item> result : myObjects) {
Item item = result.get();
if (item.objectName().contains(".")) {
files.add(item.objectName());
}
}
return files;
}
} catch (Exception e) {
System.err.println("minIO connect error, please try again later");
}
return null;
}
public static void download(String bucket, String url, HttpServletResponse response) throws Exception {
ObjectStat state = minioClient.statObject(StatObjectArgs.builder().bucket(bucket).object(url).build());
byte[] buffer = new byte[1024];
int length = (int) state.length();
try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucket).object(url).build());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(length)) {
ByteStreams.copy(inputStream, outputStream);
buffer = outputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-disposition", "attachment; filename=" + new String(url.getBytes("utf-8"), "ISO8859-1"));
response.getOutputStream().write(buffer);
response.flushBuffer();
response.getOutputStream().close();
}
public static String uploadFile(MultipartFile file, String bucketName) throws Exception {
if (null == file || 0 == file.getSize()) {
return null;
}
boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!bucketExists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
long l = System.currentTimeMillis();
String originalFilename = l + "_" + file.getOriginalFilename();
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(originalFilename)
.stream(file.getInputStream(), file.getSize(), 0L)
.build());
return originalFilename;
}
public static void removeFile(String bucketName, String fileName) throws Exception {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
}
public static String getObjectByte(String bucket, String url) throws Exception {
byte[] buffer = new byte[1024 * 1024];
StringBuilder sb = new StringBuilder();
try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucket).object(url).build())) {
int i = 0;
while ((i = inputStream.read(buffer)) != -1) {
sb.append(new String(buffer, 0, i));
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public static String getPreviewFileUrl(String bucketName, String fileName) {
String previewFileUrl = "";
try {
previewFileUrl = minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName)
.object(fileName)
.build());
} catch (ErrorResponseException | InsufficientDataException | InternalException
| InvalidBucketNameException | InvalidExpiresRangeException | InvalidKeyException
| InvalidResponseException | IOException | NoSuchAlgorithmException
| XmlParserException | ServerException e) {
e.printStackTrace();
}
return previewFileUrl;
}
}