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
1084a2b4
Commit
1084a2b4
authored
Sep 11, 2026
by
lijiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 分片上传是文件名字带上hash防止重名
parent
d66ac723
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
2 deletions
+16
-2
index.ts
src/api/common/index.ts
+16
-2
No files found.
src/api/common/index.ts
View file @
1084a2b4
...
@@ -86,6 +86,18 @@ async function fileHashHeadTailMiddle(file: File, chunkSize = 1024 * 1024) {
...
@@ -86,6 +86,18 @@ async function fileHashHeadTailMiddle(file: File, chunkSize = 1024 * 1024) {
return
CryptoJS
.
MD5
(
finalHashes
.
join
(
''
)).
toString
(
CryptoJS
.
enc
.
Hex
)
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数组
// 将文件进行分片 返回一个Blob数组
function
createChunks
(
file
:
File
,
chunkSize
:
number
)
{
function
createChunks
(
file
:
File
,
chunkSize
:
number
)
{
const
chunks
:
Blob
[]
=
[]
const
chunks
:
Blob
[]
=
[]
...
@@ -122,12 +134,14 @@ async function uploadFileByChunks(
...
@@ -122,12 +134,14 @@ async function uploadFileByChunks(
const
{
onProgress
}
=
options
const
{
onProgress
}
=
options
const
fileHash
=
await
fileHashHeadTailMiddle
(
file
)
const
fileHash
=
await
fileHashHeadTailMiddle
(
file
)
const
fileSuffix
=
file
.
name
.
includes
(
'.'
)
?
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
'.'
))
:
''
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
}
>
(
const
checkResponse
=
await
axios
.
post
<
{
data
:
ChunkCheckResponse
}
>
(
`
${
resolveUploadBaseUrl
()}
/mobiles/file-upload/check`
,
`
${
resolveUploadBaseUrl
()}
/mobiles/file-upload/check`
,
{
{
hash
:
fileHash
,
hash
:
fileHash
,
fileName
:
file
.
n
ame
,
fileName
:
uploadFileN
ame
,
fileSize
:
file
.
size
,
fileSize
:
file
.
size
,
fileSuffx
:
fileSuffix
,
fileSuffx
:
fileSuffix
,
},
},
...
@@ -207,7 +221,7 @@ async function uploadFileByChunks(
...
@@ -207,7 +221,7 @@ async function uploadFileByChunks(
)
)
const
finishFormData
=
new
FormData
()
const
finishFormData
=
new
FormData
()
finishFormData
.
set
(
'fileName'
,
file
.
n
ame
)
finishFormData
.
set
(
'fileName'
,
uploadFileN
ame
)
finishFormData
.
set
(
'fileId'
,
fileHash
)
finishFormData
.
set
(
'fileId'
,
fileHash
)
finishFormData
.
set
(
'chunkTotalCount'
,
String
(
totalChunks
))
finishFormData
.
set
(
'chunkTotalCount'
,
String
(
totalChunks
))
...
...
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