凌夕文件管理系统是基于SpringBoot3.x+Mybatis+Mybatis-Plus+VUE3+Element Plus开发的文件管理系统,
支持单文件上传、分片上传,视频上传完成后,可以根据视频转码配置转成对应的视频格式(mp4、m3u8),文档上传完成后,会转成pdf文件,
支持word、excel、ppt、wps、text、rtf文件转成pdf。
支持音视频、图片、文档在线预览、下载、重命名、移动文件夹、删除等操作,支持文件分类查看。
新建文件夹在文件管理页面,点击【新建文件夹】,就可以在当前文件夹下新建一个文件夹了,默认文件夹名称为“新建文件夹”,默认会全选,可以重新修改名称,按回车后,就完成文件夹创建。
移动文件在文件管理页面,可以选择文件移动到其他文件夹下。
上传文件文件可以在线上传,上传使用分片上传方式,如果上传重复文件,可以直接秒传,秒传是根据文件md5进行判断。在文件管理页面,点击【上传文件】按钮,就会弹出上传文件的弹窗。
可以拖拽文件到窗口或者点击窗口选择文件进行文件上传,上传过程中可以实时查看上传进度。
上传完成后,可以点击右边的【查看】按钮,查看上传文件的详情页。
文件上传完成后,会自动发起转码,文档会转成pdf文件,视频会根据转码配置进行转码。
文档预览文档上传后,会自动转成pdf文件,可以在线预览,可以在文件详情页面,点击【转码预览】按钮,就可以在线查看pdf文件内容。
视频预览视频上传完成后,会根据转码配置自动转码,在视频详情页面,可以查看原文件和转码文件。点击【原文件预览】按钮,就可以预览原文件。
点击底下的转码列表右边的预览,就可以查看当前转码后的文件的视频。
转码配置转码配置是针对视频文件转码进行配置的,视频上传后会根据开启的转码配置进行转码,可以在转码配置页面进行添加、修改、删除、开启/关闭转码。
新增转码配置点击【新增】按钮,系统会弹出新增转码配置界面,填写信息后点击【保存】按钮,即可添加新的转码配置。
修改转码在转码配置管理页面,点击每个转码配置右边的编辑,即可进入编辑页面,修改内容完成后,点击【保存】按钮,即可完成修改。
删除转码配置在转码配置管理页面,点击每个转码配置右边的删除,点击确定后,就可以删除指定的转码配置。
开启转码配置在转码配置管理页面,点击每个转码配置状态,就可以切换开启/关闭转码配置。
转码进度在转码进度页面可以实时查看转码进度,也可以对文件进行重新转码。
点击右边的【重新转码】按钮,就可以对文件重新转码。
数据库:mysql
缓存:redis
文件服务器:nginx
部署前需修改application.yml文件中的mysql和redis信息,需要部署nginx服务作为文件服务器,nginx配置可查看“本地存储”章节内容
springboot3.x+mybatis+mybatis-plus
vue3+element-plus+vite
默认支持2G文件上传,如果需要调整,修改application.yml中的以下2个参数:
spring:
servlet:
multipart:
#单个文件最大限制
max-file-size: 2048MB
#总上传文件总大小
max-request-size: 2048MB
视频水印只支持图片水印,要开启视频水印,需要先将视频水印图片放在项目目录下。
水印文件固定路径:/resources/static/watermark.png
可以开启、关闭水印,可以设置水印位置,具体可以看以下水印的配置信息。
config:
video:
#视频水印,水印图片固定在位置:/resources/static/watermark.png
watermark:
#开启/关闭水印,true 开启,false 关闭
enable: true
#水印位置 TOP_LEFT 左上角,TOP_RIGHT 右上角,BOTTOM_LEFT 左下角,BOTTOM_RIGHT 右下角
location: TOP_LEFT
#x、y为对应4个角的距离,不能为负数,负数可能会报错
offset-x: 100
offset-y: 100
文档水印只有在转成pdf后才可以添加水印,文档只能添加文字水印,可以配置当前时间。
可以开启、关闭水印,可以设置水印位置,具体可以看以下水印的配置信息。
config:
document:
watermark:
#开启/关闭水印,true 开启,false 关闭
enable: true
#开启水印加上当前时间
time-enable: true
#时间格式,yyyy 年、MM 月、dd 日、HH 小时、mm 分钟、ss 秒
time-format: yyyy-MM-dd HH:mm:ss
#水印内容,如果开启时间,会在内容后面加上时间
content: 凌夕文件管理系统
#文字大小
font-size: 12
#行距
row-space: 100
#列距
col-space: 150
#透明度
alpha: 0.1
文件存储支持本地文件存储和minio存储(还未完善,如果有需要,可以继续完善该功能),在application.yml中可以设置存储类型
config:
file-server:
#文件服务,local/minio,local本地文件服务,minio minio服务
type: local
本地存储需要配置本地存储文件路径(绝对路径)和本地文件预览地址,需要使用nginx配置file-dir的访问服务,preview-url为nginx配置的域名和端口。
config:
file-server:
local:
#本地文件上传路径
file-dir: /Users/zcx/develop/lfs/uploadFile
#本地文件预览地址
preview-url: http://127.0.0.1:8918
server {
listen 8918;
server_name localhost;
location ~ .*\.ts {
root /Users/zcx/develop/lfs/uploadFile;
}
location ~ .*/thum/.* {
root /Users/zcx/develop/lfs/uploadFile;
}
location / {
root /Users/zcx/develop/lfs/uploadFile;
index index.html index.htm;
if ($arg_oper = "down") {
add_header Content-Disposition "attachment;filename=$arg_filename";
}
secure_link $arg_secret,$arg_expire;
secure_link_md5 e9eaa184ac1b4068829edb4f3ea978f4$uri$arg_expire;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
}
}
防盗链需要配置密钥和有效期时间,需要nginx配置配合,nginx配置可以查看上节nginx配置,配置的密钥需要和nginx中的密钥一致。
config:
file-server:
local:
#密钥
secret: e9eaa184ac1b4068829edb4f3ea978f4
# 防盗链st有效时长(秒)
st-effective-time: 86400
需要配置minio服务相关信息,如下:
config:
file-server:
minio:
access-key: HgiCBQslp8LDfNyWuTOj
secret-key: 65Quqe4SR881xrs9je9A4vjRNtoWmkYvtT78mL9b
url: http://127.0.0.1:9000
bucket-name: test
目前未限制文件上传格式,如果有需要,可以增加限制。
每个上传ID只能上传一个文件,如果上传多个文件用同一个上传ID,会导致上传失败。
如:/Users/zcx/develop/lfs/uploadFile/files/0cc01a75-399a-446c-8b26-902e95178856.mp4
如:/Users/zcx/develop/lfs/uploadFile/trans/video/8ab4b994-a4a8-42f6-8b1d-55e6abbb123c.mp4
如:/Users/zcx/develop/lfs/uploadFile/trans/document/8ab4b994-a4a8-42f6-8b1d-55e6abbb123c.mp4
{config.file-server.local.file-dir}/trans/hls/uuid/video.m3u8
{config.file-server.local.file-dir}/trans/hls/uuid/video_{分片编号}.ts
如:/Users/zcx/develop/lfs/uploadFile/trans/hls/65498aa0-5b0e-4959-9127-fc1f57cc98d4/video.m3u8
/Users/zcx/develop/lfs/uploadFile/trans/hls/65498aa0-5b0e-4959-9127-fc1f57cc98d4/video_0.ts
注:一个视频hls文件会有m3u8和ts两种文件格式,m3u8文件一个,ts文件若干个,每个ts文件有10秒视频,ts文件编号从0开始
如:/Users/zcx/develop/lfs/uploadFile/thum/db94fba515e9c0dc7cb20dbf06bc410c/1.jpg
地址:/getToken
请求方式:POST
请求参数:
响应数据:
{
"code":0,
"msg":"操作成功",
"data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIiLCJpYXQiOjE3MDY1MDgwOTYsImV4cCI6MTcwNjUyMjQ5NiwiYXBwSWQiOiJMZ2lDQlFzbHA4TERmTnlXdWpNbyJ9.2sAq09kEpV7teYwqIa6CxRwzAQSVrv2TeMYy5A9NS_8"
}
地址:/file/uploadInit
请求方式:POST
header参数:token
请求参数:
响应数据:
请求方式:POST
header参数:token
请求参数:
响应数据:
请求方式:POST
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功"
}
地址:/file/rename
请求方式:POST
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功"
}
地址:/file/list
请求方式:GET
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功",
"data": {
"records": [
{
"id": "1750762969215533058",
"name": "新建文件夹",
"isDir": 1,
"dirId": "0",
"fileSize": "0",
"duration": "0",
"transStatus": 0,
"createTime": "2024-01-26 06:09:54",
"thumUrl": "",
"fileType": 0
},
{
"id": "1747889182539296769",
"name": "6c26d76632e5b05779e3f2bc91e8aedf.m4v",
"isDir": 0,
"dirId": "0",
"fileSize": "60221473",
"suffix": ".m4v",
"md5": "a67c7577e464acf66a802a2dddf2ee39",
"duration": "31",
"transStatus": 1,
"createTime": "2024-01-18 07:50:29",
"fileUrl": "http://127.0.0.1:8918/files/515f4fa8-0f1e-47b3-9f04-b922c9ab0371.m4v",
"fileTransUrls": [
"http://127.0.0.1:8918/trans/hls/a62aaf96-07d4-42fd-b5e2-bc86cc61e73d/video.m3u8"
],
"thumUrl": "http://127.0.0.1:8918/thum/a67c7577e464acf66a802a2dddf2ee39/1.jpg"
}
],
"total": "32",
"size": "10",
"current": "1",
"pages": "4"
}
}
参数说明:
请求方式:GET
header参数:token
响应数据:
{
"code": 0,
"msg": "操作成功",
"data": {
"id": "1759776044321124353",
"name": "文件管理系统.pptx",
"isDir": 0,
"dirId": "0",
"fileSize": "2659028",
"suffix": ".pptx",
"md5": "269059d792de04d14ce3354d76b9d617",
"duration": "25",
"transStatus": 1,
"createTime": "2024-02-20 03:04:38",
"previewUrl": "http://127.0.0.1:8918/trans/document/39f8d3fa-fcea-4a1b-aefc-f916eca0d559.pdf?st=gy7dPuGlh2Io4mIQ-eCPQQ&e=1709703848",
"progressList": [
{
"id": "1759776044639891458",
"fileTransId": "1759776224541978625",
"progress": 100.0,
"format": "pdf",
"transStatus": 1,
"startTime": "1708398278757",
"endTime": "1708398321706",
"previewUrl": "http://127.0.0.1:8918/trans/document/39f8d3fa-fcea-4a1b-aefc-f916eca0d559.pdf?st=gy7dPuGlh2Io4mIQ-eCPQQ&e=1709703848",
"fileSize": "34518359"
}
],
"thumUrl": "http://127.0.0.1:8918/thum/269059d792de04d14ce3354d76b9d617/1.jpg?st=esCMdzh-HZeqA29W1fFUIA&e=1709703848",
"fileType": 3,
"pdfWatermark": "凌夕文件管理系统 2024-03-06 13:39:08"
}
}
参数说明:
如果删除文件夹,文件夹下的文件和文件夹都会被删除
地址:/file/delete
请求方式:GET
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功"
}
地址:/transTemplate/list
请求方式:GET
header参数:token
请求参数:无
响应数据:
{
"code": 0,
"msg": "操作成功",
"data": [
{
"id": 1746778020070301697,
"name": "普清",
"status": 0,
"width": 0,
"height": 1080,
"format": "m3u8",
"frameRate": 20,
"bitRate": 2000,
"codec": "h264",
"audioCodec": "aac",
"audioChannel": 2,
"audioBitRate": 112,
"audioSampleRate": 8000,
"createTime": "2024-01-15 06:15:08"
}
]
}
参数说明:
请求方式:POST
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功"
}
地址:/transTemplate/updateStatus
请求方式:POST
header参数:token
请求参数:
响应数据:
请求方式:POST
header参数:token
请求参数:
响应数据:
地址:/file/thumList
请求方式:GET
header参数:token
请求参数:
响应数据:
请求方式:POST
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功"
}
地址:/file/manualTranscode
请求方式:POST
header参数:token
请求参数:
响应数据:
请求方式:GET
header参数:token
请求参数:
响应数据:
{
"code": 0,
"msg": "操作成功",
"data": {
"records": [
{
"id": "1749360770384216065",
"fileId": "1749360770249998339",
"fileTransId": "1749360775123779586",
"progress": 100.0,
"format": "pdf",
"transStatus": 1,
"startTime": "1705915083869",
"endTime": "1705915085036",
"fileName": "常用软件.xlsx",
"createTime": "2024-01-22 09:18:03"
}
],
"total": "26",
"size": "10",
"current": "1",
"pages": "3"
}
}
参数说明:
分辨率设置的是PAR(图像纵横比),默认未指定sar或者dar时,dar不会变,sar会被设置为跟par比例一样,所以转码的视频比例也不会变,宽度根据高度自动计算,即指定的宽度无效。
480p=标清=640x480
720p=高清=1280×720p
1080p=蓝光=1920x1080p
2K=1440P=2560x1440
4K=2160P=3840x2160
8K=4320P= 7680×4320
高度默认:1080
宽度默认:0(自动计算)
截图格式为jpg图片。
目前音频基本都用AAC编码,因为这个编码目前来说压缩率高,而且音质损失极底。
双声道:是指有两个声音的通道,双声道是在空间放置两个互成一定角度的扬声器,每个扬声器单独由一个声道提供信号。双声道是二路输入,二路输出,但不一定是立体声。(左右声道都只有一路的信号输入),也称为双声道混和声。
普通音质转成无损音质,并不是成了无损音乐,反而体积增大了,这就是所谓假无损。
8000 Hz:电话所用采样率, 对于人的说话已经足够
11025 Hz:电话所用采样率
22050 Hz:无线电广播所用采样率
32000 Hz:miniDV 数码视频 camcoRDer、DAT (LP mode)所用采样率
44100 Hz:音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率
48000 Hz:miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
96000 Hz:DVD-Audio、一些 LPCM DVD 音轨、BD-ROM(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。