springboot+minio实现文件的上传下载
1、下载安装minio,这里就不阐述了,自行百度就行。
2、在pom.xml文件中导入minio相关包,代码如下:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
3、在配置文件中配置minio相关的参数信息,代码如下:
minio:
bucket: minio-demo
host: http://127.0.0.1:9006
url: http://127.0.0.1:9006/minio-demo/
accessKey: minioadmin
secretKey: minioadmin
4、编写文件上传、下载工具类
@Configuration
public class MinIOUtils {
@Value("${minio.bucket}")
private String bucket;
@Value("${minio.host}")
private String host;
@Value("${minio.url}")
private String url;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
/**
* 文件上传
* @param file 要上传的文件
* @return
*/
public String upload(MultipartFile file) {
if(file == null){
return null;
}
try {
UUID uuid = UUID.randomUUID();
StringBuilder s = new StringBuilder();
s.append(uuid.toString().replace("-", ""));
MinioClient minioClient = new MinioClient(host, accessKey, secretKey);
// bucket 不存在,创建
if (!minioClient.bucketExists(bucket)) {
minioClient.makeBucket(bucket);
}
//得到文件流
InputStream input = file.getInputStream();
//文件名
String fileName = s.append(file.getOriginalFilename()).toString();
//类型
String contentType = file.getContentType();
//把文件放置Minio桶(文件夹)
// 如需要将文件分成文件夹的形式,只需在文件名前加入对应的文件夹路径就行了
// 如:fileName = "images/" + fileName;
minioClient.putObject(bucket, fileName, input, contentType);
StringBuilder fileUrl = new StringBuilder(url);
fileUrl.append(fileName);
return fileUrl.toString();
} catch (Exception e){
e.printStackTrace();
}
}
/**
* 文件下载
* @param response
* @param url
*/
public void download(HttpServletResponse response, String url){
// 从链接中得到文件名
String replace = url.replace(bucket + "/", "#");
String fileName = replace.split("#")[1];
InputStream inputStream;
try {
MinioClient minioClient = new MinioClient(host, accessKey, secretKey);
ObjectStat stat = minioClient.statObject(bucket, fileName);
inputStream = minioClient.getObject(bucket, fileName);
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
5、使用工具类,调用@Autowired注解注入工具类,再调用其方法就行了!