直接上代码吧,好多文章的下载都写的不明不白的,让人理解错,气死了!!
文件上传功能文件上传很简单,首先你得部署好minio,然后写好配置信息,我的是动态读取nacos上配置的yml
@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient client;
@Autowired
private FileInfoMapper fileInfoMapper;
@Override
public String uploadFile(MultipartFile file) throws Exception
{
String fileName = FileUploadUtils.extractFilename(file);
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
client.putObject(args);
return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
}
@Override
public int uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception
{
//文件UUID
String uuid= IdUtils.fastSimpleUUID();
//文件目录名称
String fileName = FileUploadUtils.extractFilenameByUuid(file, uuid);
// 文件路径
String url = fileInfo.getSid()+ "/" + fileName;
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(fileInfo.getSid()+ "/" + fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
client.putObject(args);
//上传到minio后,将文件信息保存
fileInfo.setUid(uuid);
fileInfo.setFileName(file.getOriginalFilename());
fileInfo.setFileSize(file.getSize());
fileInfo.setFileType(FileUploadUtils.getExtension(file));
fileInfo.setFilePath(url);
fileInfo.setCreateBy(SecurityUtils.getUsername());
fileInfo.setCreateTime(DateUtils.getNowDate());
return fileInfoMapper.insertFileInfo(fileInfo);
}
文件下载功能
这里遇到个理解错误的消息,minio提供的 getObject方法 和downloadObject方法:
1. getObjectGetObject接口用于获取某个文件(Object)。
此操作需要对此Object具有读权限。
获取对象的数据。
InputStream使用后返回必须关闭以释放网络资源。
2. downloadObject将对象的数据 下载到文件 。
我以为downloadObject就是下载的意思(毕竟英文名也是下载的意思),结果他就是不是下载,而是下载到文件。
下载主要参数是文件保存的目录地址,如:system/task/2022/05/11/daebcc866c7f4c7dad34c55b8abff687.png,而不是这样子的:http://192.168.8.116:9000/test/2022/05/11/logo_20220511103344A001.png
因为:http://192.168.1.1:9000/test/ minio会直接在这下面开始查,test为桶名称bucketName
业务层:@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient client;
@Override
public void download(String fileName, ServletOutputStream outputStream)
{
try (InputStream inputStream = client.getObject(GetObjectArgs
.builder()
.bucket(minioConfig.getBucketName())
.object(fileName)
.build()))
{
IOUtils.copy(inputStream, outputStream);
}
catch (Exception e)
{
log.error("文件下载异常");
e.printStackTrace();
}
}
控制层
@GetMapping("/download/{uid}")
public void download(@PathVariable("uid") String uid,HttpServletResponse response) throws Exception
{
//根据文件UUID,查询文件表,得到文件路径目录
String fileName = fileInfoService.selectFilePathById(uid);
System.out.println(fileName);
//调用业务层下载方法
sysFileService.download(fileName,response.getOutputStream());
} 


