docker安装minio及实现文件上传、删除、下载方式
目录
- docker安装minio及文件上传、删除、下载
- 1. docker安装minio步骤
- 2. minio实现文件上传、删除、下载
- 上传文件
- 删除文件
- 下载文件
- 总结
docker安装minio及文件上传、删除、下载
要搭建一个分布式文件存储系统,听说fastDFS能实现,于是我搜了一下fastDFS,结果半路杀出一个minio

考虑到拓展性、开发api文档完善度、部署效率等原因我选择了minio。
因为个人没真正使用过fastDFS,所以不作过多评价,占个坑,以后有机会深度体验后回来写评测。
1. docker安装minio步骤
第一步 查镜像
docker search minio
第二步 拉镜像
docker pull minio/minio
第三步 启动容器
docker run -p 9000:9000 --name minio -d --restart=always -e “MINIO_ACCESS_KEY=admin” -e “MINIO_SECRET_KEY=admin123456” -v /home/data:/data -v /home/config:/root/.minio minio/minio server /data
第四步 登录界面
- http//:ip+9000
- ACCESS_KEY:damin
- SECRET_KEY:admin123456

2. minio实现文件上传、删除、下载
项目结构

pom依赖:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2.1.0.RELEASE org.springframework.boot spring-boot-starter-web io.minio minio 3.0.10
启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class CfUploadApplication {
public static void main(String[] args) {
SpringApplication.run(CfUploadApplication.class,args);
}
}
yml配置文件:
server:
port: 8002
spring:
application:
name: upload-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
servlet:
multipart:
enabled: true #开启文件上传
max-file-size: 500MB
max-request-size: 500MB
minio:
endpoint: http://localhost:9000 #Minio服务所在地址
bucketName: cheung #存储桶名称
accessKey: admin #访问的key
secretKey: admin123456 #访问的秘钥
logging:
level:
com.heima: debug
controller代码:
package com.cheung.upload.controller;
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
@RequestMapping("file")
public class UploadController {
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 {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
InputStream object = minioClient.getObject(BUCKETNAME, filename);
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());
}
}
}
上传文件
使用postman进行测试


删除文件

下载文件

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
栏 目:其它服务器
下一篇:Docker安装Nginx容器配置及重新生成镜像图文教程
本文标题:docker安装minio及实现文件上传、删除、下载方式
本文地址:https://zz.feitang.co/server/30479.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





