前言

之前用到文件上传功能,在这里做个学习记录。使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费)。minio的中文文档:https://docs.min.io/cn/

minio安装

  1. 首先查询docker镜像:
    docker search minio
  2. 选着stars最高的那个拉取:
    docker pull minio/minio
  3. 启动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操作

  1. 启动成功后,访问你minio的ip地址,这里我docker安装在本机,所以是http://localhost:9000,输入刚刚设置的账号密码。
  2. 登陆后右下角可以创建bucket.
  3. 创建多个bucket后
  4. 可以选择编辑和删除
  5. 可以点击右下角上传文件
  6. 支持各种类型的文件:

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. 百度云和阿里云实现文件上传下载和删除功能

    百度云和阿里云类似,本文以百度云为例. 创建百度云对象存储实例 1. 进入百度云官网找到对象存储BOS 2.创建Bucket 3.客户端认证信息 accessKeyId和accessKeySecret ...

  2. 【Java编程系列】Minio实现文件上传下载

    热门系列: [Java编程系列]Amazon S3实现文件上传下载 目录 热门系列: 1.前言 2.Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Mi ...

  3. springboot文件上传下载实战 —— 登录功能、展示所有文件

    springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...

  4. minio操作,文件上传下载

    minio操作工具类(其中,ip,端口,账号,密码在配置文件中配置) @Api(value = "minio操作") @Component public class UploadF ...

  5. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  6. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  7. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1

    转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...

  8. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  9. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

最新文章

  1. IE6 IE7 不支持 JSON
  2. python django flask_Flask 与 Django 的简单对比
  3. Lombok 安装、入门 - 消除冗长的 java 代码
  4. java程序中date类型比较大小总结
  5. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
  6. python傅里叶逆变换_OpenCV-Python系列之傅里叶变换
  7. python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)
  8. c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导
  9. 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
  10. 如何进行业务需求分析
  11. 信息流广告投放分析实战案例!
  12. 美国密歇根州立大学计算机专业,密歇根州立大学计算机科学与工程系
  13. 热电传感器(1)——原理和定律
  14. 老九课堂c语言百度云,老九学堂C语言
  15. Android后台播放音乐(含通知栏操作)
  16. 50道C/C++编程练习题 复习必备(1-10)
  17. android 11.0 12.0USB连接模式默认设为MTP
  18. linux中python怎么退出_linux 怎么退出python
  19. 【分享】unlock music解锁音乐项目CLI版本
  20. 手游大话藏宝阁找不到服务器,大话西游手游藏宝阁指定交易在哪里 藏宝阁怎么没有指定我...

热门文章

  1. c+++11并发编程语言,C++11并发编程:多线程std:thread
  2. JavaScript | 如何为变量分配十进制,八进制和十六进制值?
  3. java编写简单邮件_Javamail,编写简单的程序发送邮件
  4. debian安装java jdk_Linux(Centos、Debian)之安装Java JDK及注意事项(转)
  5. 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...
  6. JavaScript中的嵌套事件处理(在鼠标移动事件上)
  7. Spring Boot (八)MyBatis + Docker + MongoDB 4.x
  8. nodejs常用组件
  9. 使用Bazel编译报错ERROR: Unrecognized option: --experimental_repo_remote_exec解决方法
  10. mysql怎么修改表中的文字_mysql表中怎么修改字段?