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