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