1、拉取minio镜像
docker pull minio/minio
2、 创建minio容器
docker run --name minio -p 9090:9000 -p 9999:9999 -d --restart=always -e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=minioadmin" -v /home/minio/data:/data -v /home/minio/config:/root/.minio minio/minio server /data --console-address '0.0.0.0:9999'
3、访问http://ip:9090即可,账号密码都是minioadmin
4、springboot下的pom
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
5、application.yml
minio:
endpoint: http://10.1.46.19:9090 #Minio服务所在地址
bucketName: commons #存储桶名称
accessKey: minioadmin #访问的key
secretKey: minioadmin #访问的秘钥
6、MiniController.java
@RestController
@RequestMapping("file")
public class MinioController {
private static final Logger LOGGER = LoggerFactory.getLogger(UploadController.class);
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKETNAME;
@Value("${minio.accessKey}")
private String ACCESSKEY;
@Value("${minio.secretKey}")
private String SECRETKEY;
//文件创建
@PostMapping("/upload")
public String upload(MultipartFile file) {
String s = null;
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
//存入bucket不存在则创建,并设置为只读
if (!minioClient.bucketExists(BUCKETNAME)) {
minioClient.makeBucket(BUCKETNAME);
minioClient.setBucketPolicy(BUCKETNAME, "*.*", PolicyType.READ_ONLY);
}
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 文件存储的目录结构
String objectName = sdf.format(new Date()) + "/" + filename;
// 存储文件
minioClient.putObject(BUCKETNAME, objectName, file.getInputStream(), file.getContentType());
LOGGER.info("文件上传成功!");
s = ENDPOINT + "/" + BUCKETNAME + "/" + objectName;
} catch (Exception e) {
LOGGER.info("上传发生错误: {}!", e.getMessage());
}
return s;
}
//文件删除
@DeleteMapping("/delete")
public String delete(String name) {
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
minioClient.removeObject(BUCKETNAME, name);
} catch (Exception e) {
return "删除失败" + e.getMessage();
}
return "删除成功";
}
//文件下载
@GetMapping("/download")
public void downloadFiles(@RequestParam("filename") String filename, HttpServletResponse httpResponse) {
try {
Integer subFileName=filename.indexOf("/");
System.out.println(filename.substring(0,subFileName));
System.out.println(filename.substring(subFileName,filename.length()));
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
InputStream object = minioClient.getObject(filename.substring(0,subFileName), filename.substring(subFileName,filename.length()));
byte buf[] = new byte[1024];
int length = 0;
httpResponse.reset();
httpResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
httpResponse.setContentType("application/octet-stream");
httpResponse.setCharacterEncoding("utf-8");
OutputStream outputStream = httpResponse.getOutputStream();
while ((length = object.read(buf)) > 0) {
outputStream.write(buf, 0, length);
}
outputStream.close();
} catch (Exception ex) {
LOGGER.info("导出失败:", ex.getMessage());
}
}
public static void main(String[] args) {
String sss="asda'/asdas/qweqw";
System.out.println();
}
}
7、没有桶会自动创建,如果手动创建,需要开放访问权限
8、测试访问
下载