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
您可能感兴趣的文章
- 02-02hadoop动态增加和删除节点方法介绍
- 02-02干货 | Linux新手入门好书推荐
- 02-02linux系统下MongoDB单节点安装教程
- 02-02Linux下nginx生成日志自动切割的实现方法
- 02-02Centos 6中编译配置httpd2.4的多种方法详解
- 02-02CentOS7 下安装telnet服务的实现方法
- 02-02分布式Hibernate search详解
- 02-02Hadoop对文本文件的快速全局排序实现方法及分析
- 02-02CentOS6.3添加nginx系统服务的实例详解
- 02-02Hadoop编程基于MR程序实现倒排索引示例


阅读排行
推荐教程
- 12-07解决tomcat启动报错:一个或多个listeners启动失败问题
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07Tomcat启动报错:严重: Unable to process Jar entry [m
- 12-07Tomcat配置IPV6的实现步骤
- 12-07tomcat启动报错jar not loaded的问题
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-11docker存储目录迁移示例教程
- 01-07windows server 2008安装配置DNS服务器
- 12-07Tomcat部署war包并成功访问网页详细图文教程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程




