minio实现文件上传下载和删除功能
前言
之前用到文件上传功能,在这里做个学习记录。使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费)。minio的中文文档:https://docs.min.io/cn/
minio安装
- 首先查询docker镜像:
docker search minio
- 选着stars最高的那个拉取:
docker pull minio/minio
- 启动minio服务器,并设置端口号,容器名,账号和密码:
docker run -p 9000:9000 --name minio -e MINIO_ACCESS_KEY=tanchuntcc -e MINIO_SECRET_KEY=tanchuntcc -v /data:/data minio/minio server /data
minio操作
- 启动成功后,访问你minio的ip地址,这里我docker安装在本机,所以是http://localhost:9000,输入刚刚设置的账号密码。
- 登陆后右下角可以创建bucket.
- 创建多个bucket后
- 可以选择编辑和删除
- 可以点击右下角上传文件
- 支持各种类型的文件:
Java客户端
首先创建一个Springboot项目,在resources中的application.yml文件添加如下配置:
server:port: 8080spring:servlet:multipart:enabled: true #开启文件上传max-file-size: 500MBmax-request-size: 500MBminio:endpoint: http://localhost:9000 #Minio服务所在地址bucketName: tcc #存储桶名称accessKey: tanchuntcc #访问的keysecretKey: tanchuntcc #访问的秘钥
添加minio的maven依赖:
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>3.0.10</version></dependency>
controller的代码如下:
@RestController("/minioDemo")
public class MinioDemoController {private static final Logger LOGGER = LoggerFactory.getLogger(MinioDemoController.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;//文件创建@PostMappingpublic 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;}//文件删除@DeleteMappingpublic String delete(String name) {try {MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);minioClient.removeObject(BUCKETNAME, name);} catch (Exception e) {return "删除失败"+e.getMessage();}return "删除成功";}
}@GetMappingpublic 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());}}
编写好demo程序后使用postman进行测试:使用postman文件上传时选择body中的form-data选项,然后属性栏里面选择file属性就可以实现文件上传了。
删除文件时输入文件的相对路径即可删除:
导出文件时填好文件名称,选择save and download即可在postman中导出文件:
minio实现文件上传下载和删除功能相关推荐
- 百度云和阿里云实现文件上传下载和删除功能
百度云和阿里云类似,本文以百度云为例. 创建百度云对象存储实例 1. 进入百度云官网找到对象存储BOS 2.创建Bucket 3.客户端认证信息 accessKeyId和accessKeySecret ...
- 【Java编程系列】Minio实现文件上传下载
热门系列: [Java编程系列]Amazon S3实现文件上传下载 目录 热门系列: 1.前言 2.Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Mi ...
- springboot文件上传下载实战 —— 登录功能、展示所有文件
springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...
- minio操作,文件上传下载
minio操作工具类(其中,ip,端口,账号,密码在配置文件中配置) @Api(value = "minio操作") @Component public class UploadF ...
- springboot文件上传下载实战 ——文件上传、下载、在线打开、删除
springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...
- 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现
文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- java文件客户端下载_使用Java写一个minio的客户端上传下载文件
标签:color ati tty java system wired format media param 前言: 确保已经安装了minio的服务端 代码: pom.x ...
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...
最新文章
- IE6 IE7 不支持 JSON
- python django flask_Flask 与 Django 的简单对比
- Lombok 安装、入门 - 消除冗长的 java 代码
- java程序中date类型比较大小总结
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
- python傅里叶逆变换_OpenCV-Python系列之傅里叶变换
- python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)
- c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导
- 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
- 如何进行业务需求分析
- 信息流广告投放分析实战案例!
- 美国密歇根州立大学计算机专业,密歇根州立大学计算机科学与工程系
- 热电传感器(1)——原理和定律
- 老九课堂c语言百度云,老九学堂C语言
- Android后台播放音乐(含通知栏操作)
- 50道C/C++编程练习题 复习必备(1-10)
- android 11.0 12.0USB连接模式默认设为MTP
- linux中python怎么退出_linux 怎么退出python
- 【分享】unlock music解锁音乐项目CLI版本
- 手游大话藏宝阁找不到服务器,大话西游手游藏宝阁指定交易在哪里 藏宝阁怎么没有指定我...
热门文章
- c+++11并发编程语言,C++11并发编程:多线程std:thread
- JavaScript | 如何为变量分配十进制,八进制和十六进制值?
- java编写简单邮件_Javamail,编写简单的程序发送邮件
- debian安装java jdk_Linux(Centos、Debian)之安装Java JDK及注意事项(转)
- 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...
- JavaScript中的嵌套事件处理(在鼠标移动事件上)
- Spring Boot (八)MyBatis + Docker + MongoDB 4.x
- nodejs常用组件
- 使用Bazel编译报错ERROR: Unrecognized option: --experimental_repo_remote_exec解决方法
- mysql怎么修改表中的文字_mysql表中怎么修改字段?