基于 YMP 框架实现的文件上传及资源访问服务模块,特性如下:
- 支持文件指纹匹配,秒传;
- 支持图片文件多种规则等比例压缩;
- 支持视频文件截图;
- 支持上传文件
ContentType
白名单过滤; - 支持主从负载模式配置;
- 支持自定义响应报文内容;
- 支持自定义扩展文件存储策略;
- 支持跨域上传文件及用户身份验证;
- 支持 MongoDB 文件存储;
<dependency>
<groupId>net.ymate.module</groupId>
<artifactId>ymate-module-fileuploader</artifactId>
<version>2.0.0</version>
</dependency>
#-------------------------------------
# module.fileuploader 模块初始化参数
#-------------------------------------
# 节点标识符, 默认值: unknown
ymp.configs.module.fileuploader.node_id=
# 缓存名称前缀, 默认值: ""
ymp.configs.module.fileuploader.cache_name_prefix=
# 缓存数据超时时间, 可选参数, 数值必须大于等于0, 否则将采用默认
ymp.configs.module.fileuploader.cache_timeout=
# 默认控制器服务请求映射前缀(不允许'/'开始和结束), 默认值: ""
ymp.configs.module.fileuploader.service_prefix=
# 是否注册默认控制器, 默认值: true
ymp.configs.module.fileuploader.service_enabled=
# 是否开启代理模式, 默认值: false
ymp.configs.module.fileuploader.proxy_mode=
# 代理服务基准URL路径(若开启代理模式则此项必填), 必须以 http:// 或 https:// 开始并以'/'结束, 如: http://www.ymate.net/fileupload/, 默认值: 空
ymp.configs.module.fileuploader.proxy_service_base_url=
# 代理客户端与服务端之间通讯请求参数签名密钥, 默认值: ""
ymp.configs.module.fileuploader.proxy_service_auth_key=
# 上传文件存储根路径(根据存储适配器接口实现决定其值具体含义), 默认存储适配器取值: ${root}/upload_files
ymp.configs.module.fileuploader.file_storage_path=
# 缩略图文件存储根路径(根据存储适配器接口实现决定其值具体含义), 默认存储适配器取值与上传文件存储根路径值相同
ymp.configs.module.fileuploader.thumb_storage_path=
# 静态资源引用基准URL路径, 必须以 http:// 或 https:// 开始并以'/'结束, 如: http://www.ymate.net/static/resources/, 默认值: 空(即不使用静态资源引用路径)
ymp.configs.module.fileuploader.resources_base_url=
# 文件存储适配器接口实现, 若未提供则使用系统默认, 此类需实现net.ymate.module.fileuploader.IFileStorageAdapter接口
ymp.configs.module.fileuploader.file_storage_adapter_class=
# 图片文件处理器接口实现, 若未提供则使用系统默认, 此类需实现net.ymate.module.fileuploader.IImageProcessor接口
ymp.configs.module.fileuploader.image_processor_class=
# 资源处理器类, 用于资源上传、匹配及验证被访问资源是否允许(非代理模式则此项必填), 此类需实现net.ymate.module.fileuploader.IResourcesProcessor接口
ymp.configs.module.fileuploader.resources_processor_class=
# 文件上传成功后是否自动执行生成图片或视频截图缩略图, 默认值: false
ymp.configs.module.fileuploader.thumb_create_on_uploaded=
# 是否允许自定义缩略图尺寸, 默认值: false
ymp.configs.module.fileuploader.allow_custom_thumb_size=
# 缩略图尺寸列表, 该尺寸列表在允许自定义缩略图尺寸时生效, 若列表不为空则自定义尺寸不能超过此范围, 如: 600_480|1024_0 (0表示等比缩放, 不支持0_0), 默认值: 空
ymp.configs.module.fileuploader.thumb_size_list=
# 缩略图清晰度, 如: 0.70f, 默认值: 0f
ymp.configs.module.fileuploader.thumb_quality=
# 允许上传的文件ContentType列表, 如: image/png|image/jpeg, 默认值: 空, 表示不限制
ymp.configs.module.fileuploader.allow_content_types=
**示例一:**上传文件,以 POST 方式请求 URL 地址:
http://localhost:8080/uploads/push
参数说明:
- file: 上传文件流数据;
- type: 指定请求结果处理器,若未提供则采用默认,可选值:
fileupload
响应:
- 未指定
type
参数时:
{
"ret": 0,
"data": {
"createTime": 1638200758000,
"extension": "mp4",
"filename": "a1175d94f245b9a142955b42ac285dc2.mp4",
"hash": "a1175d94f245b9a142955b42ac285dc2",
"lastModifyTime": 1638200758000,
"mimeType": "video/mp4",
"size": 21672966,
"sourcePath": "video/a1/17/a1175d94f245b9a142955b42ac285dc2.mp4",
"status": 0,
"type": "VIDEO",
"url": "http://localhost:8080/uploads/resources/video/a1175d94f245b9a142955b42ac285dc2"
}
}
- 指定
type=fileupload
时:
{
"files": [
{
"size": 21672966,
"name": "a1175d94f245b9a142955b42ac285dc2.mp4",
"type": "video",
"hash": "a1175d94f245b9a142955b42ac285dc2",
"thumbnailUrl": "http://localhost:8080/uploads/resources/video/a1175d94f245b9a142955b42ac285dc2"
}
]
}
**示例二:**文件指纹匹配,以 POST 方式请求 URL 地址:
http://localhost:8080/uploads/match
参数说明:
- hash: 文件哈希值(MD5),必选参数;
响应:
若匹配成功则返回该文件的描述信息;
{
"ret": 0,
"matched": true,
"data": {
"createTime": 1638200758000,
"extension": "mp4",
"filename": "a1175d94f245b9a142955b42ac285dc2.mp4",
"hash": "a1175d94f245b9a142955b42ac285dc2",
"lastModifyTime": 1638200758000,
"mimeType": "video/mp4",
"size": 21672966,
"sourcePath": "video/a1/17/a1175d94f245b9a142955b42ac285dc2.mp4",
"status": 0,
"type": "VIDEO",
"url": "http://localhost:8080/uploads/resources/video/a1175d94f245b9a142955b42ac285dc2"
}
}
**示例三:**文件资源访问,以 GET 方式请求 URL 地址:
http://localhost:8080/uploads/resources/{type}/{hash}
参数说明:
-
type: 文件类型,必选参数,可选值范围:
image
、video
、audio
、text
、application
、thumb
-
hash: 文件哈希值(MD5),必选参数;
注:若需要强制浏览器下载资源,只需在请求参数中添加
?attach
即可,并支持通过?attach=<FILE_NAME>方式自定义文件名称(文件名称必须合法有效,不能包含特殊字符,否则将使用默认文件名称)。
YMP 不仅提供便捷的 Web 及其它 Java 项目的快速开发体验,也将不断提供更多丰富的项目实践经验。
感兴趣的小伙伴儿们可以加入官方 QQ 群:480374360,一起交流学习,帮助 YMP 成长!
如果喜欢 YMP,希望得到你的支持和鼓励!
了解更多有关 YMP 框架的内容,请访问官网:https://ymate.net