亚马逊上传分段“乘以文件大小”JS

问题描述

我正在 aws 中以分段方式上传文件,我已经检查了文件大小、缓冲区大小,一切都很好,但是,在 aws 上我有一个 500 兆字节的文件(而不是 100 兆字节...)

可能是什么问题?

我的代码如下:

准备发送和的函数


async function send(uploadID,path,filename,projectTitle) {
    let stats = fs.statSync(path);
    let data = [];
    let readStream = fs.createReadStream(path,{ highWaterMark: 10 * 1024 * 1024});
    readStream.on('data',(chunk)=>{
        data.push(chunk)
    }).on('end',async ()=>{
        for (let i = 0; i<data.length; i++){
            await $.post(baseUrl + "/signChunk/" + token_g,{
                uploadId : uploadID,partNumber : i+1,id : currentProjectID
            }).done(async (result)=>{
                if(result.response===true){
                    await putData(result.signedRequest,data[i],i+1,data.length,uploadID);
                }
            });

        }
    });

    return 0;
}

向远程发送数据的函数(chunk by chunk)


async function putData(url,chunk,id,dataLen,fn,uploadID,attemps = 0){
    let part = {"PartNumber" : id,"ETag" : ""};
    let opts = {
        url : url,method : "PUT",data : {
            data: escape(chunk).toString('binary')
        }
    }
    curSize = 0;
    $.ajax(opts).done(async (data,status,xhr)=>{
        if(xhr.status==200){
            part.ETag = xhr.getResponseHeader("etag")
            complete.push(part);
            if(complete.length>=dataLen){
                finalizeUpload(uploadID);
            }
        } else {
            putData(url,attemps++);
        }
    })
}

完成上传函数(并从块中重组文件


async function finalizeUpload(uploadID){
    let result = await $.post(baseUrl + "/endMultipart/" + token_g,{
        id : currentProjectID,uploadId : uploadID,partsNumbers : complete
    });
    complete = [];
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)