2017-01-23 23 views
5

Tôi mới vào nút js/express. Tôi đang cố gắng tạo nhiều ứng dụng tải lên hình ảnh với cloudfront và s3 bucket.Và tôi muốn hiển thị thanh tiến trình cho người dùng Tôi đang sử dụng socket io cho quá trình tải lên đó. Ảnh sẽ nằm trong vòng lặp Nhưng vấn đề là khi tải lên ảnh bắt đầu, nó luôn luôn hiển thị 100% hoàn thành không phải từ đầu. Đừng nghĩ rằng tải lên được hoàn thành nó không phải là, tập tin của tôi là 20MB .Tôi không phải những gì đang xảy ra tôi đã bỏ lỡ một cái gì đóhttpUploadProgress không hoạt động như dự kiến ​​cho dữ liệu Bộ đệm?

đây là mã của tôi

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') 
    } 





}); 

Trả lời

1

kiểm tra đầu tiên nếu bạn đã cập nhậtthư viện lên phiên bản mới nhất và Cố Sửa đổi mã của bạn với một này:

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

tôi không chắc chắn chính xác những gì đang xảy ra, nhưng tôi nghĩ rằng cái này giúp với vấn đề của bạn. Mặc dù, các biến được sử dụng trong này là từ một nguồn tương tự khác. Thử áp dụng phương thức.

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); 
Các vấn đề liên quan