2017-01-23 4 views
5

Я новичок в узле js/express. Я пытаюсь сделать несколько приложений для загрузки изображений с облачным и s3-ведром. И я хочу показать индикатор выполнения для пользователя. Я использую для этого сокет io.Photo uploading progress будет в цикле но проблема заключается в том, что при загрузке фотографий он всегда показывает 100% -ное завершение не с самого начала. Не думаю, что загрузка завершена, это не так. Мой файл - 20 МБ. Я не делаю, что-то случилось. Я пропустил что-то.httpUploadProgress не работает должным образом для данных буфера?

это мой код

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





}); 

ответ

1

первый чек, если вы обновленныйбиблиотека версии последняя и попробуйте изменить код с этим:

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

Я точно не знаю, что происходит, но я думаю, что это один помогает с вашей проблемой. Хотя переменные, используемые в этом, относятся к другому аналогичному источнику. Попробуйте принять метод.

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^