【RuoYi-Vue-Plus】学习笔记 02 - OSS模块(二)之文件上传(使用MinIO基于Win10环境)
文章目录
- 一、概述
- 二、功能
- 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环境)相关推荐
- python3上传文件_Python3学习笔记(十八):文件上传和下载
importrequests upload_url= 'http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hos ...
- python3下载文件-Python3学习笔记(十八):文件上传和下载
importrequests upload_url= 'http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hos ...
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...
Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...
- Spring MVC 学习总结(五)——校验与文件上传
目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二.JSR303验证器 2.1.添加hibernate-v ...
- 阿里云OSS对象存储(文件上传与下载)宝宝级教程
1.注册自己的阿里云账号 2.登录账号以后,进入主页面搜索"对象存储OSS 然后可以看到如下界面 立即购买,自己学习使用可以选择购买最小的存储空间,半年即可 管理控制台,购买了存储空间以后可 ...
- 阿里云OSS后台实现远程文件上传下载
1.登陆阿里云,开通OSS,找到官方文档 按照下列所有步骤点进去就可以找到官方文档 这里上传下载都在这里 现在实现方式,当然我是学的java 必传的四个参数 #文件上传配置 file:alicloud ...
- Vue.js学习笔记 02、Vue组件篇笔记
文章目录 前言 一.全局组件 子组件应用 组件优点:组件的可复用性 全局组件缺点描述 二.局部组件 创建与注册局部组件(认识components属性) 局部组件的默认规定(组件名称首字母全都大写) 三 ...
- NODEMCU学习笔记-01 esp8266 WIFI杀手 源码上传版
NODEMCU学习笔记-01 esp8266WIFI杀手 动手前的准备 NODEMCU和ESP8266 ARDUINO IDE GITHUB CSDN 让我们开始吧 连接开发板并安装驱动 安装ardu ...
- Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
文件上传概述 1.文件上传的作用 例如网络硬盘,就是用来上传下载文件的. 在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求 上 ...
最新文章
- 数据库的查询,添加,修改,删除
- linux xxd命令 十六进制显示文件
- php 回复id同过session 任意获取id不通过a,PHP会话ID相同但变量丢失
- Java项目中如何更优雅的处理空值?
- mysql 透明代理_透明代理MySQL_基于zbus的MySQL透明代理(100行)-云栖社区
- Protobuf序列化的原理-字符如何转化为编码
- 20个正则表达式必知(前端开发)
- 每天进步一点点《ML - 支持向量机》
- 华北水利水电大学计算机研究生调剂,2017年华北水利水电大学考研调剂公告
- latex linux 安装,Linux 安装LaTeX
- 教你几个白嫖百度文库的方法,亲测可用!建议收藏!
- Leetcode 739. Daily Temperatures
- android4.4 获取符合默认短信应用要求的短信应用包名
- 【Niagara 04】Tridium N4使用——生成报警信息
- 每日程序C语言37-圈子报数问题
- Python实战之小说下载神器(一)看小说怎么能少了这款宝藏神器呢?全网小说书籍随便下,随便看,爆赞(你准备好了吗?)
- 基于三菱Q系列PLC的CC-Link IE Field Basic的伺服总线控制系统硬件组态设置
- php新闻网站毕设论文,校园新闻发布毕业设计网站php实现
- Maven打包报错Unknown lifecycle phase “mvn“. You must specify a valid lifecycle
- BLE CC2540之ADC