# 文件上传下载组件
# 概述
在web开发中,文件上传下载是一个非常常见的功能,本文主要讲解HOS的file组件如何使用。
# 导入依赖
<dependency>
<groupId>com.mediway.hos</groupId>
<artifactId>hos-framework-file-starter</artifactId>
</dependency>
# 配置文件
在配置文件配置file组件配置项
framework:
file:
upload:
path: E:/upload/
view:
path: /viewPath
addresses: http://127.0.0.1:8007
minio:
enable: true
endpoint: http://127.0.0.1:9000
accessKey: minioadmin
secretKey: minioadmin
spring:
servlet:
multipart:
max-file-size: 10485760
max-request-size: 20MB
说明:
- framework.file: 是file组件的配置项
- framework.file.upload.path:文件在服务器的存储目录,以/结尾,默认为
/opt/fileServer/upload/
- framework.file.view.path:文件访问路径,以/结尾,默认为
/viewPath/
- framework.file.addresses:本地服务器地址以及端口
- framework.file.minio: minio相关配置项
- framework.file.minio.enable: 是否开启minio,开启之后文件会上传到minio服务器
- framework.file.minio.endpoint: minio服务器地址
- framework.file.minio.accessKey: minio服务用户名
- framework.file.minio.secretKey: minio服务秘密
- spring.servlet.multipart: spring对上传文件的大小设置
# 在数据库中创建hos_sys_file表
CREATE TABLE `hos_sys_file` (
`id` varchar(32) NOT NULL,
`file_name` varchar(100) NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`path` varchar(100) NOT NULL,
`file_size` varchar(255) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 接口
# 上传文件并返回文件id
请求方式
url:http://localhost:8367/file/uploadReturnId
method:POST
Content-Type: multipart/form-data;charset=UTF-8
body入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
file | 文件 | 必选 | 需要上传的文件 |
fileName | String | 可选 | 文件名称 |
响应结果
{
"code": "200",
"msg": "success",
"data": {
"fileId": "91c328b3bd6ee5c3cfb502f7ccb2acac"
},
"success": true
}
# 上传文件并返回文件访问相对路径
请求方式
url:http://localhost:8367/file/uploadReturnUrl
method:POST
Content-Type: multipart/form-data;charset=UTF-8
body入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
file | 文件 | 必选 | 需要上传的文件 |
fileName | String | 可选 | 文件名称 |
响应结果
{
"code": "200",
"msg": "success",
"data": {
"id": "dc4f9ae4080c4c69fc894c1d4f8b5a02",
"fileName": "libEGL.dll",
"md5": null,
"fileUrl": "http://localhost:8367/viewPath/668310f4-0dfd-4d77-b440-e78c51fbcf0e.jpg",
"fileSize": "403.4KB"
},
"success": true
}
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
id | String | 必选 | 文件id |
fileName | String | 必选 | 文件名称 |
md5 | String | 可选 | 文件md5码 |
fileUrl | String | 必选 | 文件路径 |
普通模式下,在文件路径之前加上服务器的地址就是文件访问路径,
如http://localhost:8080/api/viewPath/668310f4-0dfd-4d77-b440-e78c51fbcf0e.jpg
若是使用minio模式,直接访问返回的路径可下载,minio模式需要将hos-starter-dependencies
版本升级到1.0.12-RELEASE才可以使用
# 通过id获取文件信息
请求方式
url:http://localhost:8367/file/getFileById?id=xxx
method:GET
Content-Type: multipart/form-data;charset=UTF-8
入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
id | String | 必选 | 文件id(上传接口出参中的文件id) |
响应结果
{
"code": "200",
"msg": "success",
"data": {
"id": "dc4f9ae4080c4c69fc894c1d4f8b5a02",
"fileName": "libEGL.dll",
"md5": null,
"fileUrl": "http://localhost:8367/viewPath/668310f4-0dfd-4d77-b440-e78c51fbcf0e.dll",
"fileSize": "403.4KB",
"createTime": null,
"updateTime": null
},
"success": true
}
# 下载
请求方式
url:http://localhost:8367/file/downloadById?id=xxx
method:GET
Content-Type: multipart/form-data;charset=UTF-8
入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
id | String | 必选 | 文件id(上传接口出参中的文件id) |
响应结果为一个文件流
# 多租户上传
开启多租户后,上传时根据不同的租户id会创建对应的目录。
请求方式
url:http://localhost:8367/file/uploadReturnUrl
method:POST
Content-Type: multipart/form-data;charset=UTF-8
body入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
file | 文件 | 必选 | 需要上传的文件 |
fileName | String | 可选 | 文件名称 |
headers入参
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
tenantId | String | 可选 | 租户id |
响应结果
{
"code": "200",
"msg": "success",
"data": {
"id": "dc4f9ae4080c4c69fc894c1d4f8b5a02",
"fileName": "libEGL.dll",
"md5": null,
"fileUrl": "http://localhost:8367/viewPath/xxxxxx/668310f4-0dfd-4d77-b440-e78c51fbcf0e.jpg",
"fileSize": "403.4KB"
},
"success": true
}
参数 | 类型 | 是否可选 | 描述 |
---|---|---|---|
id | String | 必选 | 文件id |
fileName | String | 必选 | 文件名称 |
md5 | String | 可选 | 文件md5码 |
fileUrl | String | 必选 | 文件路径,xxxx为入参的租户id值 |
注意:若上传文件过大会出现超过最大限制的错误,如下图
需要将配置项spring.servlet.multipart.max-file-size
(最大文件限制)
与spring.servlet.multipart.max-request-size
(请求最大限制),调整至合适的数值
← Redisson分布式锁 字段填充 →