Scaffold-Boot-3.0框架使用文档Scaffold-Boot-3.0框架使用文档
首页
快速开始
变更记录
Source
首页
快速开始
变更记录
Source
  • 开始
  • 基础

    • 目录结构
    • 代码生成器
    • 增删改查
    • 异常处理
    • Knife4j(Swagger)文档
    • 登录&登出
    • 系统安全
    • 数据字典
    • Excel处理
    • 文件上传下载
    • 工具类
    • 定时任务
    • 微信集成
    • 短信服务
    • 参数配置
    • 接口限流
    • 日志审计
    • 数据脱敏
    • 网站管理
  • AI开发

    • AI项目工程结构
    • MCP服务
    • AI开发模式介绍
  • 开发规范
  • 常见问题
  • 深入

    • 配置详解-Config类
    • 配置详解-Yml配置文件
  • 生命周期

    • SonarQube代码质量保证
    • 部署到测试环境
    • 部署到正式环境
  • 优秀案例

    • Excel导入完整案例
  • 信创专区

    • 海量数据库
    • 神通数据库
    • 达梦数据库
    • 麒麟v10安装插件
  • 框架升级

文件上传下载

章节简介

本章节介绍系统中文件上传后存储的方式,包括基于MinIO、本地存储。以及文件存储后下载

上传文件

严重警告

目前系统支持Minio和本地两种文件存储方式,这两种方式在文件上传后返回的文件路径上是有区别的,本地存储返回的是相对路径,Minio返回的是绝对路径。 请勿必让前端注意动态判断文件路径,如果是全路径则直接使用,如果是相对路径则需要拼接域名后再使用!!!

  1. 文件上传作为一个系统常用功能,在业务中经常用到,框架已经对文件上传进行了封装,可以直接使用。请查看system包下的 SysOssController的upload()方法
  2. 系统上传文件应该统一使用此接口,各业务只需获取此接口返回的文件路径及文件名即可
  3. file字段为上传的文件,serverCode为存储类型,系统默认支持Local和Minio两种方式,下面详细介绍,name为文件名
  4. 此接口为/admin开头的接口,需要登录后使用,如需要在未登录情况下上传文件,可以复制一份此接口至api目录下

@ApiOperation("上传文件")
@PostMapping(value = "/upload")
public Result upload(@RequestParam(name = "file") MultipartFile file,
                     @RequestParam(name = "serverCode", required = false) String serverCode,
                     @RequestParam(name = "name", required = false) String name) {
    if (StringUtil.isEmpty(serverCode)) {
        serverCode = ossProperties.getDefaultType();
    }
    if (file == null || file.isEmpty()) {
        return new Result(ResultCode.BAD_REQUEST, "请选择要上传的文件");
    }
    SysOss upload = baseService.upload(file, serverCode, name);
    return new JsonResult<>(upload);
}

文件存储至Minio

  1. Minio是基于Amazon S3协议的云存储服务,它是一个开源的云存储中间件,一般在开发及测试环境中,使用Minio去存储文件,可以做到测试环境和开发环境文件的同步。 请在application.yml配置文件中,设置Minio的相关信息,并且设置默认存储类型为Minio,如下所示:
  2. 目前公司已搭建http://minio-s3.cnsaas.com这个Minio端点做为通用文件存储服务,如需使用,请联系技术经理获取访问Key和密钥
  3. 由于Minio返回的是绝对路径,直接通过返回的路径访问即可
oss:
  config:
    default-type: Minio # OSS上传文件默认传输位置
    # 支持的文件上传类型
    support-ext: xls,xlsx,doc,docx,ppt,pptx,pdf,txt,jpg,jpeg,png,gif,bmp,zip,rar,7z,pdf,mp4,avi,mov
    # minio相关配置,参阅Minio
    minio:
      endpoint: http://minio-s3.cnsaas.com
      accessKey: 访问Key
      secret: 密钥
      bucket: 桶

文件存储至本地

警告

若使用本地存储的方式,建议在生产环境中,使用Nginx去代理文件存储目录,不要让Java去处理静态资源,这样可以提高系统的速度。

  1. 存储至本地为最传统,最基础的方式,在application.yml配置文件中设置默认存储类型为LocalServer即可
  2. 文件会存储值path目录下,url是拼接在文件名前面的前缀
  3. 由于本地存储返回的是相对路径,需要拼接域名后再使用
  4. 按照以下配置文件举例说明:上传文件后,返回的url是/vpath/data/image/png/aaaa.jpg,则
    访问地址: http://localhost:9090/vpath/data/image/png/aaaa.jpg
    存储位置: /mnt/data/file/image/png/aaaa.jpg
oss:
  config:
    #支持本地LocalServer和Minio两种方式
    default-type: LocalServer
    support-ext: xls,xlsx,doc,docx,ppt,pptx,pdf,txt,jpg,jpeg,png,gif,bmp,zip,rar,7z,pdf,mp4,avi,mov
    local-oss:
      path: /mnt/data/file
      url: /vpath/data

下载文件

当后端在代码中需要下载文件时,可以通过OssSaveUtil的download()方法,系统会根据配置文件中的default-type来判断存储类型,从而下载对应的文件, 获取到输入流后,可按需求进行后续操作

// 本地存储
InputStream inputStream = OssSaveUtil.download("/vpath/data/image/png/aaaa.jpg");
// Minio存储
InputStream inputStream = OssSaveUtil.download("http://minio-s3.cnsaas.com/scaffold-boot-3/aaaa.jpg");

附件与图片

  1. 图片建议数据库中直接存储路径即可
  2. 附件建议以json的形式将路径,文件名存储到数据库字段中,json格式读取,存储请参考常见问题->数据库中json字段的使用
在 GitLab 上编辑此页
最后更新: 2025/6/17 17:28
贡献者: xuew
Prev
Excel处理
Next
工具类