文章

文件上传下载功能

文件上传下载功能

本框架实现了本地(服务器对应目录下)文件上传下载功能和seaweedfs的文件上传下载功能。


1.配置文件

目前框架中跟文件上传相关的配置项及其默认值如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 文件上传最大支持文件大小
spring.servlet.multipart.max-file-size=200MB
# 文件上传最大支持请求大小
spring.servlet.multipart.max-request-size=200MB
base.utility.file.dir=/root/deploy/market-admin/develop/upload
base.utility.file.operator=LocalFileOperator
#-------------------附件功能参数配置----------------------------------
#LocalFileOperator使用参数
base.utility.attachment.preview.host=xxx:xxx
#本地文件预览地址
base.utility.attachment.preview.url=/api/open/preview
#SeaweedFileOperator使用参数
base.utility.file.seaweed.master.url=http://xxx:xxx
base.utility.file.seaweed.volume.ip=http://xxx:xxx

其中包含了本地文件上传和seaweedfs上传的所有配置项,但是实际开发过程中我们一般只会选择其中一种作为文件的上传方式,所以只需要在对应环境的utility配置文件中使用对应的配置项即可,具体使用哪些配置项会在下文说明

21-2

其中spring.servlet.multipart.max-file-sizespring.servlet.multipart.max-request-size是Spring支持的文件上传大小,如果需要调整自行在配置文件填写。

base.utility.file.operator配置项控制文件是上传到本地还是seaweedfs。


1.1.本地文件上传下载

配置项 代表含义
base.utility.file.operator LocalFileOperator 使用本地文件上传
base.utility.file.dir 服务器的目录 文件上传后存储的目录
base.utility.attachment.preview.host 一般为服务器地址+端口 对外开放预览功能时的主机地址
base.utility.attachment.preview.url /api/open/preview(目前不支持修改) 对外开放预览功能时的url

需要说明的是,图片文件经常需要在前端直接展示,而不是以附件的形式,故开放此功能,框架会将base.utility.attachment.preview.hostbase.utility.attachment.preview.url以及其他关键属性拼接成一个完整的预览文件路径返回给前端,此路径不受鉴权控制,

下面是一个完整的配置文件demo

1
2
3
4
base.utility.file.operator=LocalFileOperator
base.utility.file.dir=D:/test
base.utility.attachment.preview.host=localhost:8080
base.utility.attachment.preview.url=/api/open/preview


1.2.seaweedfs文件上传下载

配置项 代表含义
base.utility.file.operator SeaweedFileOperator 使用seaweed文件上传
base.utility.file.seaweed.master.url 主控服务地址 主要用来存储文件和fid映射关系
base.utility.file.seaweed.volume.ip 数据卷服务地址 存储文件元数据

seaweedfs本身支持上述图片展示功能,只需要用数据卷服务地址和fid进行拼接即可,例如:http://10.110.200.52:9090/6,9ad6c04e7d,由于文件需要先暂存到本地,所以也需要base.utility.file.dir配置项

1
2
3
4
base.utility.file.dir=D:/test
base.utility.file.operator=SeaweedFileOperator
base.utility.file.seaweed.master.url=http://xxx:xxx
base.utility.file.seaweed.volume.ip=http://xxx:xxx


2.接口调用

虽然后台采用了两种文件上传方式,但是提供的接口却只有一套,接口调用方无须考虑上传方式,在Swagger上可以看到完整的接口

21-2

接口说明如下:

接口 说明 调用示例 返回值说明
/utility/attachment/upload 附件上传;调用时参数需采用form data的形式,同时指定附件名为file localhost:8080/services/utility/attachment/upload 其中fullUrl即上文所说的可以直接预览的文件地址。relativeUrl提供给前端的图片相对地址,再通过nginx转发到实际的地址
/utility/attachment/download 根据附件id字段attachmentId下载 localhost:8080/services/utility/attachment/download?attachmentId=44e4f260ef82519322e10cbc0b81afa9  
/utility/attachment/downloadResource 下载文件资源接口,预留接口    
/utility/attachment/downloadTemplate 用于下载框架中resources/template目录下的文件模板,name字段为文件名字,displayName为文件下载后显示的名字 localhost:8080/services/utility/attachment/downloadTemplate?name=orgImportTemplate.xlsx&displayName=组织架构上传模板  
/utility/attachment/getOne 获取附件表信息,参数可以为附件表中的任意字段 localhost:8080/services/utility/attachment/getOne 具体的文件信息
/utility/attachment/listByIds 根据多id获取多附件信息;此接口用于获取批量文件信息,参数名称为ids,参数为多个附件id,以逗号分隔 localhost:8080/services/utility/attachment/listByIds 多个文件信息
本文由作者按照 CC BY 4.0 进行授权