2015-03-19 61 views
0

我想以串行方式将上传的图像存储在我的nodejs应用程序中的特定命名方案中。上传后在Nodejs中重命名图像

假设我上传第一张图片时,它应该重命名为1.png并存储。对于后面的那些,它们被存储为2.png,3.png,...,而不管上传时的名称是什么。

我可以很容易地做到这一点。但是,在图像上传完成之前,正在执行用于重命名的异步代码。

需要一些建议和帮助。

app.post('/projects/:uid/:qid', function (req, res) { 
    try{ 

     var _uid = req.param("uid"); 
     var _q = req.param("qid"); 
     var _path = __dirname + '/public/projects/' + _uid + '/'+_q; 

     //console.log("projects/images uid - %s path - %s",_uid,_path); 

     mkdirp(_path, function (err) { 
      if (err){ 
       console.error(err); 
       res.json({status:"NOT OK - Failed"}); 
      } 
      else { 
       var form = new formidable.IncomingForm(); 

       form.uploadDir = _path; 
       form.keepExtensions = true; 
       form.type = 'multipart'; 
       form.multiples = true; 

       var img_number = 0; 

       form.on('fileBegin', function(name, file) { 
        //console.log("file uploading begin -", name,file); 
        file.path = form.uploadDir +'/'+ file.name; 
        //console.log(file.path); 
        img_number++; 
       }); 

       form.on('error', function(err) { 
        console.log("file Upload Error - ", err); 
        res.json({status:"ERROR"}); 
       }); 

       form.on('end', function() { 
        res.json({status:"OK" , number_of_images: img_number}); 
       }); 

       form.parse(req, function(err, fields, files) { 

       }); 
      } 
     }); 
    } 
    catch(e){console.log("IMAGE UPLOAD FAILURE- ",e);} 
}); 

回答

0

找到了答案。

将它重命名为form.parse()可以解决这个问题。

form.parse(req, function(err, fields, files) { 
        var img_name = randomInt(0,100000).toString(); 
        fs.rename(files.upload.path, _path +'/'+ img_name + '.png', function (error) { 
         if (error) { 
          fs.unlink(_path +'/'+img_name+'.png'); 
          fs.rename(files.upload.path, _path +'/'+img_name+'.png'); 
         } 
        }); 
       }); 
+1

var img_name = md5(Date.now())+'。' + file.name.split('。')。pop(); – 2015-03-19 07:04:50