文章目录

  • 一、概述
  • 二、功能
    • 0、前提
    • 1、Web端页面
    • 2、MinIO页面
    • 3、本地文件
  • 三、MinIO安装使用(基于Win10)
    • 0、前提
    • 1、MinIO安装使用
      • 1.1、文件目录
      • 1.2、版本
      • 1.3、运行
      • 1.4、可能出现的错误
    • 2、配置修改
      • 2.1、修改 MinIO 控制台账号密码
      • 2.2、修改项目配置
  • 四、代码实现
    • 上传方法:`SysOssController#upload()`
    • 上传实现类:`SysOssServiceImpl#upload()`
    • 获取存储实例:`OssFactory#instance()`
    • Redis中实例缓存信息:
    • MinIO 文件上传业务实现:`MinioCloudStorageStrategy#uploadSuffix()`

一、概述

本篇文章主要内容是 RuoYi-Vue-Plus 框架中的OSS模块的文件上传内容。

二、功能

0、前提

关于OSS模块使用:文档说明地址

1、Web端页面



2、MinIO页面

3、本地文件

三、MinIO安装使用(基于Win10)

0、前提

关于MinIO:
A. 官方网站
B. 中文文档

1、MinIO安装使用

1.1、文件目录

store是自定义的存储路径。

1.2、版本

1.3、运行

根据命令行运行:

minio.exe server  D:\dev\minio\store --console-address "127.0.0.1:9000"  --address "127.0.0.1:9090"

指定存储路径 D:\dev\minio\store
指定控制台路径 --console-address "127.0.0.1:9000"
指定API路径 --address "127.0.0.1:9090"

注:没有指定路径登录会报错。

此时可以通过 http://127.0.0.1:9000 登录控制台。账号密码也已经展示在CMD中。

登录成功界面如下。

1.4、可能出现的错误

运行如下命令:

minio.exe server  D:\dev\minio\store

出现如下结果:

无法登录页面:

一开始测试的时候,根据网上的教程没有指定路径,导致无法登录(可能是版本原因)。因此在运行时需要指定路径。

2、配置修改

2.1、修改 MinIO 控制台账号密码

修改文件config.json。

修改文件中 access_key 以及 secret_key 的值即可。

2.2、修改项目配置

注:项目配置需要与 MinIO 运行配置匹配,否则无法上传。


四、代码实现

上传方法:SysOssController#upload()

 /*** 上传OSS对象存储*/@ApiOperation("上传OSS对象存储")@ApiImplicitParams({@ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true),})@PreAuthorize("@ss.hasPermi('system:oss:upload')")@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)@RepeatSubmit@PostMapping("/upload")public AjaxResult<Map<String, String>> upload(@RequestPart("file") MultipartFile file) {if (ObjectUtil.isNull(file)) {throw new ServiceException("上传文件不能为空");}SysOss oss = iSysOssService.upload(file);Map<String, String> map = new HashMap<>(2);map.put("url", oss.getUrl());map.put("fileName", oss.getFileName());return AjaxResult.success(map);}

上传实现类:SysOssServiceImpl#upload()

 @Overridepublic SysOss upload(MultipartFile file) {// 获取文件原名称String originalfileName = file.getOriginalFilename();// 获取文件后缀String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());// 获取存储实例ICloudStorageStrategy storage = OssFactory.instance();UploadResult uploadResult;try {// 文件上传uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());} catch (IOException e) {throw new ServiceException(e.getMessage());}// 保存文件信息SysOss oss = new SysOss().setUrl(uploadResult.getUrl()).setFileSuffix(suffix).setFileName(uploadResult.getFilename()).setOriginalName(originalfileName).setService(storage.getServiceType());save(oss);return oss;}

获取存储实例:OssFactory#instance()

 /*** 获取默认实例*/public static ICloudStorageStrategy instance() {// 获取redis 默认类型String type = Convert.toStr(RedisUtils.getCacheObject(CloudConstant.CACHE_CONFIG_KEY));if (StringUtils.isEmpty(type)) {throw new OssException("文件存储服务类型无法找到!");}return instance(type);}/*** 根据类型获取实例*/public static ICloudStorageStrategy instance(String type) {ICloudStorageStrategy service = SERVICES.get(type);if (service == null) {refreshService(type);service = SERVICES.get(type);}return service;}private static void refreshService(String type) {Object json = RedisUtils.getCacheObject(CloudConstant.SYS_OSS_KEY + type);CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class);if (properties == null) {throw new OssException("系统异常, '" + type + "'配置信息不存在!");}// 获取redis配置信息 创建对象 并缓存ICloudStorageStrategy service = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type));((AbstractCloudStorageStrategy)service).init(properties);SERVICES.put(type, service);}

Redis中实例缓存信息:


MinIO 文件上传业务实现:MinioCloudStorageStrategy#uploadSuffix()

 @Overridepublic UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {return upload(data, getPath(properties.getPrefix(), suffix), contentType);}@Overridepublic UploadResult upload(byte[] data, String path, String contentType) {return upload(new ByteArrayInputStream(data), path, contentType);}@Overridepublic UploadResult upload(InputStream inputStream, String path, String contentType) {try {minioClient.putObject(PutObjectArgs.builder().bucket(properties.getBucketName()).object(path).contentType(StringUtils.blankToDefault(contentType, MediaType.APPLICATION_OCTET_STREAM_VALUE)).stream(inputStream, inputStream.available(), -1).build());} catch (Exception e) {throw new OssException("上传文件失败,请核对Minio配置信息:[" + e.getMessage() + "]");}return new UploadResult().setUrl(getEndpointLink() + "/" + path).setFilename(path);}

【RuoYi-Vue-Plus】学习笔记 02 - OSS模块(二)之文件上传(使用MinIO基于Win10环境)相关推荐

  1. python3上传文件_Python3学习笔记(十八):文件上传和下载

    importrequests upload_url= 'http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hos ...

  2. python3下载文件-Python3学习笔记(十八):文件上传和下载

    importrequests upload_url= 'http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hos ...

  3. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  4. Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...

    Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...

  5. Spring MVC 学习总结(五)——校验与文件上传

    目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二.JSR303验证器 2.1.添加hibernate-v ...

  6. 阿里云OSS对象存储(文件上传与下载)宝宝级教程

    1.注册自己的阿里云账号 2.登录账号以后,进入主页面搜索"对象存储OSS 然后可以看到如下界面 立即购买,自己学习使用可以选择购买最小的存储空间,半年即可 管理控制台,购买了存储空间以后可 ...

  7. 阿里云OSS后台实现远程文件上传下载

    1.登陆阿里云,开通OSS,找到官方文档 按照下列所有步骤点进去就可以找到官方文档 这里上传下载都在这里 现在实现方式,当然我是学的java 必传的四个参数 #文件上传配置 file:alicloud ...

  8. Vue.js学习笔记 02、Vue组件篇笔记

    文章目录 前言 一.全局组件 子组件应用 组件优点:组件的可复用性 全局组件缺点描述 二.局部组件 创建与注册局部组件(认识components属性) 局部组件的默认规定(组件名称首字母全都大写) 三 ...

  9. NODEMCU学习笔记-01 esp8266 WIFI杀手 源码上传版

    NODEMCU学习笔记-01 esp8266WIFI杀手 动手前的准备 NODEMCU和ESP8266 ARDUINO IDE GITHUB CSDN 让我们开始吧 连接开发板并安装驱动 安装ardu ...

  10. Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail

    文件上传概述      1.文件上传的作用          例如网络硬盘,就是用来上传下载文件的.          在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求          上 ...

最新文章

  1. 数据库的查询,添加,修改,删除
  2. linux xxd命令 十六进制显示文件
  3. php 回复id同过session 任意获取id不通过a,PHP会话ID相同但变量丢失
  4. Java项目中如何更优雅的处理空值?
  5. mysql 透明代理_透明代理MySQL_基于zbus的MySQL透明代理(100行)-云栖社区
  6. Protobuf序列化的原理-字符如何转化为编码
  7. 20个正则表达式必知(前端开发)
  8. 每天进步一点点《ML - 支持向量机》
  9. 华北水利水电大学计算机研究生调剂,2017年华北水利水电大学考研调剂公告
  10. latex linux 安装,Linux 安装LaTeX
  11. 教你几个白嫖百度文库的方法,亲测可用!建议收藏!
  12. Leetcode 739. Daily Temperatures
  13. android4.4 获取符合默认短信应用要求的短信应用包名
  14. 【Niagara 04】Tridium N4使用——生成报警信息
  15. 每日程序C语言37-圈子报数问题
  16. Python实战之小说下载神器(一)看小说怎么能少了这款宝藏神器呢?全网小说书籍随便下,随便看,爆赞(你准备好了吗?)
  17. 基于三菱Q系列PLC的CC-Link IE Field Basic的伺服总线控制系统硬件组态设置
  18. php新闻网站毕设论文,校园新闻发布毕业设计网站php实现
  19. Maven打包报错Unknown lifecycle phase “mvn“. You must specify a valid lifecycle
  20. BLE CC2540之ADC

热门文章

  1. 牛文文点评长租公寓行业:过度金融化会毁灭整个行业
  2. 人工智能NLP在金融领域的发展趋势和实践经验
  3. 怎样下载网页上的视屏到本地
  4. Cloudera Manager 配置
  5. js骚操作骂人不带脏
  6. Symbian游戏编程入门 (一) Symbian OS简介
  7. 使用iptables进行流量控制
  8. Apache网页优化
  9. 【硬刚大数据】我们在学习Spark的时候,到底在学习什么?
  10. PHP地图规划骑行路径,规划结果 + 骑行路线绘制