httpUploadProgress的缓冲区数据没有按预期工作?

我是新的节点js /快递。我正在尝试使用cloudfront和s3桶来制作多个图像上传应用程序。我想为用户显示进度条,我正在使用套接字io。照片上传进度将在loop.but问题是,当照片上传开始时,总是显示100%完成不从一开始。不认为上传完成它不是,我的文件是20MB。我不知道什么事情我想念什么东西

这是我的代码

app.post('/posttodb',(req,res) => { let isLoggedIn = req.cookies['check']; let token = req.cookies['peace']; const bucketName = 'awsBucketName'; console.log(isLoggedIn); if(isLoggedIn == "true"){ if(token){ jwt.verify(token,JWTPASS,(err,decode) => { if(err){ console.log(err) res.json({error:true}) }else{ console.log('========================>',decode) let postOwneranme = decode.user.username; let postTags = req.body.data.postTags; let photosBlob = req.body.data.photos; let postId = req.body.data.postId; let nepostAwsPhots = []; let OwnerPic = decode.user.propic; let postOwnerFullName = decode.user.name; let isMature = req.body.data.isMature; let postThumbUrl = req.body.data.thumnailUrl; let time = new Date(); let tagSlug = req.body.data.tagSlug; function savetodb() { console.log('Inserting all into DB'); r.connect({db:'image'}).then(conn => { r.table('posts').insert({postId:postId,username:postOwneranme,tag:postTags,postUrlsAndCaptions:nepostAwsPhots,comments:[],postOwnerPic:OwnerPic,likesCount:0,whoLikedIt:[],views:0,postedTime:time,postOwnerFullName:postOwnerFullName,isMature:isMature,thumNailUrl:postThumbUrl,tagSlug:tagSlug}).run(conn).then(response => { console.log(response) if(response.inserted > 0){ console.log('Done Bro') res.json({okva:true,postId:postId,username:postOwneranme}) }else{ res.json({okva:false}) } }) }) } function seemsToHaveNetworkProblem() { res.json({okva:false,message:"Seems To Have Network Problem"}) } forEachOf(photosBlob,(value,key,callback) => { console.log(value.id); let newImageUriWillBe = value.blobData; let newImageNamewillBe = value.id; let imageType = value.ImageType; let caption = value.caption; console.log(imageType) let buf = new Buffer(newImageUriWillBe.replace(/^data:image\/\w+;base64,/, ""),'base64'); s3.createBucket({Bucket:bucketName},() => { let params = {Bucket: bucketName, Key: postOwneranme+'/'+newImageNamewillBe, Body: buf,ContentType:imageType,ContentLength:buf.length,ACL:'public-read'}; s3.upload(params,(err,data) => { if(err){ callback(err); }else{ // console.log("Successfully uploaded data to " + bucketName + "/" + id); // console.log(`https://s3.amazonaws.com/${bucketName}/${username}/${id}`); let response = { picUrl:`https://s3.amazonaws.com/${bucketName}/${postOwneranme}/${newImageNamewillBe}`, cation:caption } nepostAwsPhots.push(response); callback() // console.log(nepostAwsPhots) res.writeHead(200, {'content-type': 'text/plain'}); res.end('Ok'); } }) //Problem Comes here .on('httpUploadProgress', function(evt) { let per = Math.round((evt.loaded * 100) / evt.total) console.log('Progress:',per); Socket.emit('Scoket',{proccesing:per}) }) }); },(err) => { if(err){ console.log("From Node Loop error",err); seemsToHaveNetworkProblem() }else { savetodb() } }) } }) }else { res.json({error:true}); console.log('OMG') } }else{ res.json({error:true}); console.log('OMG') } }); 

首先检查是否已经 更新最新版本,然后尝试使用以下代码修改代码:

 .on('httpUploadProgress',function(progress) { console.log(Math.round(progress.loaded/progress.total*100)+ '% done'); }); 

我不确定发生了什么,但是我认为这有助于解决您的问题。 尽pipe这里使用的variables来自另一个类似的来源。 尝试采用该方法。

 ss(socket).emit('strimage', stream, {size: file.size,name: fileName,email: emailid}); //initialize var to 0 var blobStream = ss.createBlobReadStream(file); var size = 0; var uploadedSize; blobStream.on('data', function(chunk) { size += chunk.length; //try giving an upload size uploadedSize = Math.floor(size / file.size * 100) console.log(uploadedSize + '%'); if (uploadedSize == 100) { console.log("inside uploadedSize"); socket.emit('uploadcomplete', data); } }); blobStream.pipe(stream);