2017-01-23 10 views
5

js/express düğümünde yeniyim. Cloudfront ve s3 bucket ile birden çok görüntü yükleme uygulaması yapmaya çalışıyorum.Ve ben kullanıcı için ilerleme çubuğu göstermek istiyorum. Bunun için socket io kullanıyorum.Fotoğraf yükleme ilerlemesi döngü içinde olacak .but sorun fotoğraf yükleme başladığında her zaman başından beri% 100 tamamlanma göstermesidir.Yükleme tamamlandığını düşünmüyorum, Benim dosyam 20MB. Neler olup bittiğini anlamadım Bir şey özledimhttpUploadProgress, Tampon verileri için beklendiği gibi çalışmıyor mu?

bu ben neler olduğunu tam olarak emin değilim benim kod

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





}); 

cevap

1

ilk onay son sürümünekütüphane güncellenmiş ve bu biriyle kodunun değiştirilmesi deneyin Eğer varsa:

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

, ama ben bu bir sorun yardımcı olur düşünüyorum. Bununla birlikte, kullanılan değişkenler başka bir benzer kaynaktan alınmıştır. Yöntemi kullanmaya çalışın.

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); 
İlgili konular