package com.ard.file.service;
|
|
import java.io.InputStream;
|
|
import io.minio.GetPresignedObjectUrlArgs;
|
import io.minio.http.Method;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Primary;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
import com.alibaba.nacos.common.utils.IoUtils;
|
import com.ard.common.core.utils.StringUtils;
|
import com.ard.file.config.MinioConfig;
|
import com.ard.file.utils.FileUploadUtils;
|
import io.minio.MinioClient;
|
import io.minio.PutObjectArgs;
|
import io.minio.RemoveObjectArgs;
|
|
/**
|
* Minio 文件存储
|
*
|
* @author ard
|
*/
|
@Primary
|
@Service
|
public class MinioSysFileServiceImpl implements ISysFileService {
|
@Autowired
|
private MinioConfig minioConfig;
|
|
@Autowired
|
private MinioClient client;
|
|
/**
|
* Minio文件上传接口
|
*
|
* @param file 上传的文件
|
* @return 访问地址
|
* @throws Exception
|
*/
|
@Override
|
public String uploadFile(MultipartFile file) throws Exception {
|
InputStream inputStream = null;
|
try {
|
String fileName = FileUploadUtils.extractFilename(file);
|
inputStream = file.getInputStream();
|
PutObjectArgs args = PutObjectArgs.builder()
|
.bucket(minioConfig.getBucketName())
|
.object(fileName)
|
.stream(inputStream, file.getSize(), -1)
|
.contentType(file.getContentType())
|
.build();
|
client.putObject(args);
|
return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
|
} catch (Exception e) {
|
throw new RuntimeException("Minio Failed to upload file", e);
|
} finally {
|
IoUtils.closeQuietly(inputStream);
|
}
|
}
|
|
/**
|
* Minio文件上传接口
|
*
|
* @param file 上传的文件
|
* @param bucketName 桶名称
|
* @return 访问地址
|
* @author 刘苏义
|
* @description 指定桶名称上传文件
|
* @date 2024/8/5 11:37
|
*/
|
@Override
|
public String uploadFile(MultipartFile file, String bucketName) throws Exception {
|
String fileName = FileUploadUtils.extractFilename(file);
|
InputStream inputStream = file.getInputStream();
|
PutObjectArgs args = PutObjectArgs.builder()
|
.bucket(bucketName)
|
.object(fileName)
|
.stream(inputStream, file.getSize(), -1)
|
.contentType(file.getContentType())
|
.build();
|
client.putObject(args);
|
IoUtils.closeQuietly(inputStream);
|
return minioConfig.getUrl() + "/" + bucketName + "/" + fileName;
|
}
|
|
@Override
|
public String uploadFile(MultipartFile file, String bucketName, String path) throws Exception {
|
//判断文件是否为空
|
if (null == file || 0 == file.getSize()) {
|
return "";
|
}
|
//文件名
|
String fileName = path + "/" + FileUploadUtils.extractFilename(file);
|
InputStream inputStream = file.getInputStream();
|
/*上传对象*/
|
PutObjectArgs putObjectArgs = PutObjectArgs
|
.builder()
|
.bucket(bucketName)
|
.object(fileName)
|
.stream(inputStream, file.getSize(), -1)
|
.contentType(file.getContentType())
|
.build();
|
client.putObject(putObjectArgs);
|
inputStream.close();
|
/*获取url*/
|
GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
|
.builder()
|
.bucket(bucketName)
|
.object(fileName)
|
.method(Method.GET)
|
.build();
|
String presignedObjectUrl = client.getPresignedObjectUrl(getPresignedObjectUrlArgs);
|
String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
|
return ObjectUrl;
|
}
|
|
/**
|
* Minio文件删除接口
|
*
|
* @param fileUrl 文件访问URL
|
* @throws Exception
|
*/
|
@Override
|
public void deleteFile(String fileUrl) throws Exception {
|
try {
|
String minioFile = StringUtils.substringAfter(fileUrl, minioConfig.getBucketName() + "/");
|
client.removeObject(RemoveObjectArgs.builder().bucket(minioConfig.getBucketName()).object(minioFile).build());
|
} catch (Exception e) {
|
throw new RuntimeException("Minio Failed to delete file", e);
|
}
|
}
|
}
|