2016-06-27 9 views
0

ファイルをアップロードするためにノードモジュールformidableを使用しています。 はここノードjsを使用して同じ名前のファイルが存在する場合のファイルアップロードの処理方法

form#uploadForm(enctype='multipart/form-data', method='POST', action='/upload') 
    input#uploadTestSheet(type='file', name='uploadTestSheet', accept='.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel') 
    button(type='submit') Submit 

ファイルがアップロードされ得ている私の.jadeコードですが、ファイルが既にディレクトリに存在している場合、ユーザーは、新しいファイルがアップロード取得されていない同じ名前のファイルを追加しようとしています。 はここ

var fs = require('node-fs-extra'); 
      var formidable = require('formidable'); 

    app.use(bodyparser({defer: true})); 
    app.post('/upload',function (req, res, next) { 

     var form = new formidable.IncomingForm(); 

     form.uploadDir =__dirname +"/uploads"; 
     form.keepExtensions = true;  
     form.parse(req, function(err, fields, files) { 
       fs.rename(files.uploadTestSheet.path,__dirname +'/uploads'+files.uploadTestSheet.name, function(err) { 
      if (err){ 
       res.render('ManualMode',{data:{id:req.user.id, hash:req.user.hash, nodePollInterval:req.user.nodePollInterval}}); 
       console.log("cannot upload: "+err); 
      } 
      }); 
      res.render('index',{data:{id:req.user.id, hash:req.user.hash, nodePollInterval:req.user.nodePollInterval}}); 
     }); 

}); 

答えて

1

fs.rename方法は、Linuxの規則に従います私のサーバーなので、ディレクトリ内のファイルを上書きする必要があります。これは、おそらくあなたの問題がブラウザにあると思うようになります。入力フィールドのvalueプロパティを最初にクリアすることなく、たとえばwill refuse to upload files of the same nameというChromeあなたのケースでは、あなたのアップロードが非同期であると仮定すると、これはどうしたら:あなたは、これは問題ではないことを確認している場合

document.getElementById('uploadTestSheet').value = ''; // after each upload 

を、名前を変更する前に潜在的に存在しないファイルを削除してみてください、の線に沿って何か:

... 
var newFilename = __dirname + '/uploads' + files.uploadTestSheet.name 
try { 
    fs.unlinkSync(newFilename) 
} catch (e) { 
    if (e.code !== 'ENOENT') 
    throw err; 
} 

fs.rename(files.uploadTestSheet.path, newFilename, function(err) { 
... 

私はそれが助けてくれることを願っています!

関連する問題