feat: 播客分段上传

This commit is contained in:
龙打野 2024-03-15 18:55:33 +08:00
parent dfcdc04fbb
commit 18ca74214e

View File

@ -65,18 +65,42 @@ module.exports = async (query, request) => {
// return xml
const res2 = await parser.parseStringPromise(res.data)
const res3 = await axios({
method: 'put',
url: `https://ymusic.nos-hz.163yun.com/${objectKey}?partNumber=1&uploadId=${res2.InitiateMultipartUploadResult.UploadId[0]}`,
headers: {
'x-nos-token': tokenRes.body.result.token,
'Content-Type': 'audio/mpeg',
},
data: query.songFile.data,
})
const fileSize = query.songFile.data.length
const blockSize = 10 * 1024 * 1024 // 10MB
let offset = 0
let blockIndex = 1
// get etag
const etag = res3.headers.etag
let etags = []
while (offset < fileSize) {
const chunk = query.songFile.data.slice(
offset,
Math.min(offset + blockSize, fileSize),
)
const res3 = await axios({
method: 'put',
url: `https://ymusic.nos-hz.163yun.com/${objectKey}?partNumber=${blockIndex}&uploadId=${res2.InitiateMultipartUploadResult.UploadId[0]}`,
headers: {
'x-nos-token': tokenRes.body.result.token,
'Content-Type': 'audio/mpeg',
},
data: chunk,
})
// get etag
const etag = res3.headers.etag
etags.push(etag)
offset += blockSize
blockIndex++
}
let completeStr = '<CompleteMultipartUpload>'
for (let i = 0; i < etags.length; i++) {
completeStr += `<Part><PartNumber>${i + 1}</PartNumber><ETag>${
etags[i]
}</ETag></Part>`
}
completeStr += '</CompleteMultipartUpload>'
// 文件处理
await axios({
@ -87,9 +111,7 @@ module.exports = async (query, request) => {
'X-Nos-Meta-Content-Type': 'audio/mpeg',
'x-nos-token': tokenRes.body.result.token,
},
data: `<CompleteMultipartUpload>
<Part><PartNumber>1</PartNumber><ETag>${etag}</ETag></Part>
</CompleteMultipartUpload>`,
data: completeStr,
})
// preCheck