diff --git a/module/voice_upload.js b/module/voice_upload.js
index b340348..6fb3109 100644
--- a/module/voice_upload.js
+++ b/module/voice_upload.js
@@ -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 = ''
+ for (let i = 0; i < etags.length; i++) {
+ completeStr += `${i + 1}${
+ etags[i]
+ }`
+ }
+ completeStr += ''
// 文件处理
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: `
- 1${etag}
- `,
+ data: completeStr,
})
// preCheck