Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
corporate-culture-qd
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王立鹏
corporate-culture-qd
Commits
4389af5b
Commit
4389af5b
authored
Sep 11, 2026
by
王立鹏
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '线上优化/修复视频上传重名问题' into 'master'
线上优化/修复视频上传重名问题 See merge request
!36
parents
d66ac723
9b374de1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
8 deletions
+23
-8
index.ts
src/api/common/index.ts
+16
-2
index.vue
src/views/publishVideo/index.vue
+7
-6
No files found.
src/api/common/index.ts
View file @
4389af5b
...
...
@@ -86,6 +86,18 @@ async function fileHashHeadTailMiddle(file: File, chunkSize = 1024 * 1024) {
return
CryptoJS
.
MD5
(
finalHashes
.
join
(
''
)).
toString
(
CryptoJS
.
enc
.
Hex
)
}
// 给文件名拼上 hash 避免不同文件重名互相覆盖 例如 a.mp4 -> a_5d41402a....mp4
// 同一个文件的 hash 是稳定的 所以秒传和断点续传拿到的仍然是同一个文件名
function
buildUniqueFileName
(
fileName
:
string
,
fileHash
:
string
)
{
const
dotIndex
=
fileName
.
lastIndexOf
(
'.'
)
// 没有后缀 或者以 . 开头的隐藏文件 直接拼在末尾
if
(
dotIndex
<=
0
)
return
`
${
fileName
}
_
${
fileHash
}
`
const
baseName
=
fileName
.
slice
(
0
,
dotIndex
)
const
suffix
=
fileName
.
slice
(
dotIndex
)
return
`
${
baseName
}
_
${
fileHash
}${
suffix
}
`
}
// 将文件进行分片 返回一个Blob数组
function
createChunks
(
file
:
File
,
chunkSize
:
number
)
{
const
chunks
:
Blob
[]
=
[]
...
...
@@ -122,12 +134,14 @@ async function uploadFileByChunks(
const
{
onProgress
}
=
options
const
fileHash
=
await
fileHashHeadTailMiddle
(
file
)
const
fileSuffix
=
file
.
name
.
includes
(
'.'
)
?
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
'.'
))
:
''
// 上传到服务端用的文件名 带上 hash 防止重名覆盖
const
uploadFileName
=
buildUniqueFileName
(
file
.
name
,
fileHash
)
const
checkResponse
=
await
axios
.
post
<
{
data
:
ChunkCheckResponse
}
>
(
`
${
resolveUploadBaseUrl
()}
/mobiles/file-upload/check`
,
{
hash
:
fileHash
,
fileName
:
file
.
n
ame
,
fileName
:
uploadFileN
ame
,
fileSize
:
file
.
size
,
fileSuffx
:
fileSuffix
,
},
...
...
@@ -207,7 +221,7 @@ async function uploadFileByChunks(
)
const
finishFormData
=
new
FormData
()
finishFormData
.
set
(
'fileName'
,
file
.
n
ame
)
finishFormData
.
set
(
'fileName'
,
uploadFileN
ame
)
finishFormData
.
set
(
'fileId'
,
fileHash
)
finishFormData
.
set
(
'chunkTotalCount'
,
String
(
totalChunks
))
...
...
src/views/publishVideo/index.vue
View file @
4389af5b
...
...
@@ -570,10 +570,11 @@ const rules = {
const
tansformData
=
(
releaseStatus
:
ReleaseStatusTypeEnum
):
AddOrUpdateVideoDto
=>
{
const
data
=
{
...
form
.
value
,
tagList
:
[
form
.
value
.
mainTagId
,
...
form
.
value
.
tagList
].
map
((
item
,
index
)
=>
({
tagId
:
Number
(
item
),
sort
:
index
,
})),
// 过滤掉空标签 防止脏值打到后端导致整篇保存失败
tagList
:
[
form
.
value
.
mainTagId
,
...
form
.
value
.
tagList
]
.
map
(
Number
)
.
filter
((
tagId
)
=>
Number
.
isInteger
(
tagId
)
&&
tagId
>
0
)
.
map
((
tagId
,
index
)
=>
({
tagId
,
sort
:
index
})),
mainTagId
:
Number
(
form
.
value
.
mainTagId
),
releaseStatus
,
}
...
...
@@ -669,8 +670,8 @@ onActivated(async () => {
form
.
value
=
{
...
form
.
value
,
...
data
,
mainTagId
:
String
(
data
.
tagIdList
?.[
0
])
,
tagList
:
data
.
tagIdList
?.
slice
(
1
),
mainTagId
:
data
.
tagIdList
?.[
0
]
?
String
(
data
.
tagIdList
[
0
])
:
''
,
tagList
:
data
.
tagIdList
?.
slice
(
1
)
||
[]
,
}
// 回显推送的部门 这个后端没有返回相关数据 需要返回
if
(
data
.
pushList
?.
find
((
item
)
=>
item
.
valueId
==
'1'
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment