# 文件上传下载组件
# 概述
在web开发中,文件上传下载是一个非常常见的功能,本文主要讲解HOS的file组件如何使用。
# 导入依赖
<dependency>
<groupId>com.mediway.hos</groupId>
<artifactId>hos-framework-file-starter</artifactId>
</dependency>
# 配置文件
配置spring框架对文件大小的限制配置
spring:
servlet:
multipart:
max-file-size: 10485760
max-request-size: 20MB
说明:hos-starter-dependencies在1.2.0-RELEASE版本之后,hos-app-dependencies在2.4.0-RELEASE版本之后,文件存储相关配置从yaml移到了数据库,之前的配置不再生效,最新配置方式请参考文件存储管理。
# 在数据库中创建hos_sys_file表
CREATE TABLE `hos_sys_file` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主键id',
`file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件名称',
`md5` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件md5值',
`path` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件路径',
`file_size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件大小',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`file_config_id` char(32) DEFAULT NULL COMMENT '文件存储配置id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
# 接口
# 上传文件并返回文件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分布式锁 字段填充 →