来来来,代码先走一波
pom.xml依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
application.yml配置文件
#minio文件服务器配置
minio:
url: http://127.0.0.1:9000 // 服务器地址
access: minioadmin // 账号
secret: minioadmin // 密码
java代码
@Value("${minio.url}")
private String url;
@Value("${minio.access}")
private String access;
@Value("${minio.secret}")
private String secret;
/**
* 文件上传
* @param file
* @return
*/
@RequestMapping("/uploadFile")
@ResponseBody
public JSONObject uploadFile(MultipartFile file) {
JSONObject jsonObject = new JSONObject();
try {
// 参数为:地址,账号,密码
MinioClient minioClient = new MinioClient(url, access, secret);
// 检查文件夹是否已经存在
boolean isExist = minioClient.bucketExists("bucketName");
if(!isExist) {
// 创建一个名为bucketName的文件夹
minioClient.makeBucket("bucketName");
//设置桶的策略
minioClient.setBucketPolicy("bucketName", "*.*", PolicyType.READ_WRITE);
}
InputStream is = file.getInputStream(); //得到文件流
String fileName = "/" +file.getOriginalFilename(); //文件名
String contentType = file.getContentType(); //类型
// 使用putObject上传一个文件到文件夹中。
//参数为:文件夹,要存成的名字,要存的文件
minioClient.putObject("bucketName", fileName, is, contentType);
String url = minioClient.getObjectUrl("bucketName", fileName);
jsonObject.put("fileUrl", url);
jsonObject.put("code", 200);
} catch (Exception e){
jsonObject.put("code", 404);
}
return jsonObject;
}
/**
* 文件删除
* @param urlName
* @return
*/
@RequestMapping("removeFile")
@ResponseBody
public JSONObject removeFile(String urlName) {
JSONObject jsonObject = new JSONObject();
try {
// 参数为:地址,账号,密码
MinioClient minioClient = new MinioClient(url, access, secret);
if(urlName.indexOf("/bucketName") > -1){
String[] strs = urlName.split("/bucketName");
minioClient.removeObject("bucketName", strs[1]);
jsonObject.put("success", true);
jsonObject.put("msg", "删除成功");
}
} catch (Exception e){
jsonObject.put("success", false);
jsonObject.put("msg", "删除失败");
}
return jsonObject;
}
/**
* 文件修改
* @param file
* @return
*/
@RequestMapping("/modifyFile")
@ResponseBody
public JSONObject modifyFile(MultipartFile file, @RequestParam("urlName") String urlName) {
JSONObject jsonObject = new JSONObject();
try {
// 参数为:地址,账号,密码
MinioClient minioClient = new MinioClient(url, access, secret);
if(urlName.indexOf("/bucketName") > -1){
String[] strs = urlName.split("/bucketName");
minioClient.removeObject("bucketName", strs[1]);
}
InputStream is = file.getInputStream(); //得到文件流
String fileName = "/" +file.getOriginalFilename(); //文件名
String contentType = file.getContentType(); //类型
// 使用putObject上传一个文件到文件夹中。
//参数为:文件夹,要存成的名字,要存的文件
minioClient.putObject("bucketName", fileName, is, contentType);
String url = minioClient.getObjectUrl("bucketName", fileName);
jsonObject.put("success", true);
jsonObject.put("url", url);
} catch (Exception e){
jsonObject.put("success", false);
}
return jsonObject;
}
/**
* 文件下载
* @param urlName
* @param response
*/
@RequestMapping("downloadFile")
public void downloadFile(@RequestParam("urlName") String urlName, HttpServletResponse response) {
try {
// 参数为:地址,账号,密码
MinioClient minioClient = new MinioClient(url, access, secret);
InputStream object = null;
if(urlName.indexOf("/bucketName") > -1){
String[] strs = urlName.split("/bucketName");
object = minioClient.getObject("bucketName", strs[1]);
}
byte buf[] = new byte[1024];
int length = 0;
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(urlName.substring(urlName.lastIndexOf("/") + 1), "UTF-8"));
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf-8");
OutputStream outputStream = response.getOutputStream();
while ( object != null && (length = object.read(buf)) > 0) {
outputStream.write(buf, 0, length);
}
outputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
注:
1.桶的策略设置,是可以通过地址可以直接访问的;(版本过高可能没有此方法)
2.参考文档:API地址
https://docs.min.io/cn/java-client-api-reference.html