2016-10-17 44 views
0

最初のファイルが正常に処理された後に2番目のファイルをアップロードできません。このルートを使用する...複数のアップロードが失敗し、最初のアップロードが3回発生します

var multer = require('multer'); 

var upload = multer({dest: 'base-images/'}); 
var type = upload.single('file'); 

app.post('/admin/upload', type, function(req, res) { 

    //Get the temporary directory/file name 
    var tmp_path = req.file.path; 
    console.log(tmp_path); //'base-images/1d7608bb0b570c7fcf669315c6f31401' 

    //Create a new filename based on time 
    var now = new Date(); 
    var timeID = Number(now); 
    var newName = timeID + ".jpg"; 
    console.log(newName); //'1476740040280.jpg' 

    //Convert the random Multer name to my newName 
    fs.rename(tmp_path, 'base-images/'+newName, function (err) { 
     if (err) throw err; 
     fs.stat('base-images/'+newName, function (err, stats) { 
      if (err) throw err; 
      console.log('stats: ' + JSON.stringify(stats)); 
      res.send("Done"); //Works the first time, not on subsequent ones. 
      //stats {"dev":16777218,"mode":33188,"nlink":1,"uid":502,"gid":20,"rdev":0,"blksize":4096,"ino":19058190,"size":101269,"blocks":200,"atime":"2016-10-17T21:33:22.000Z","mtime":"2016-10-17T21:33:22.000Z","ctime":"2016-10-17T21:33:22.000Z","birthtime":"2016-10-17T21:33:22.000Z"} 
     }); 
    }); 
}); 

画像が最初に通過するとき、予想どおりに動作します。別の画像を選択して送信すると、Error: Unexpected fieldが表示され、約2分後に元の画像の2番目のバージョンがnewNameという新しい値で表示されます。その後1分後に元画像の別のコピーがさらに別のバージョンのnewNameで表示されます。それは3回目の後に停止するようです。

私の目標は、画像をアップロードすることができ、複数のものがうまくいくようにし、サーバーが処理するタイムスタンプに名前を設定することです。

UPDATE 1:multer.diskstorageを試みる()

私はそうは後述するようにdiskstorageを組み込むしようとしているような、それを書き換えました。

var storage = multer.diskStorage({ 
     destination: function (req, file, cb) { 
      cb(null, 'base-images/'); 
     }, 
     filename: function (req, file, cb) { 
      var now = new Date(); 
      var timeID = Number(now); 
      var newName = timeID + ".jpg"; 
      cb(null, newName); 
     } 
}); 

var upload = multer({ storage: storage }).single('file'); 

app.post('/admin/upload', function(req, res) { 

    upload(req, res, function(err) { 
     if (err) { 
      console.log('Error Occurred'); 
      console.log(err); 
      return; 
     } 
     console.log(req.file); 
     res.send('Your File Uploaded'); 
     console.log('Photo Uploaded'); 
    }) 
}); 

このように3つのことが起こります。

最初に、最初のファイルのアップロードが正常に行われます。更新せず、3回目の試みが...

fs.js:975 
    binding.unlink(pathModule._makeLong(path), req); 
     ^

TypeError: path must be a string 

をスロー

第二に、.htmlをを更新せず、別のファイルのアップロードをしようとすると、次のログでError Occurredをスロー...

{ [Error: Unexpected field] 
    code: 'LIMIT_UNEXPECTED_FILE', 
    field: 'file', 
    storageErrors: [] } 

第三に、要件は、ページを更新せずに、一度に1つずつ複数のファイルをアップロードできることです。

+0

(多少の誤差が可能であり、私はこのコードをテストしていない)、これは代わりにfs.renameで使用してみてください? –

+0

お詫び申し上げます。更新されたオリジナルの投稿。 – Layne

答えて

0

/管理/アップロードルートでの応答があり

var storage = multer.diskStorage({ 
    destination: 'base-images/', 
    filename: function (req, file, cb) { 
     var now = new Date(); 
     var timeID = Number(now); 
     var newName = timeID + ".jpg"; 
     cb(null, newName); 
    } 
    }) 

var upload = multer({ storage: storage }) 
+0

ありがとうございます。上記のコードを更新して、これらの変更を反映し、新しい一連のエラーを説明しました。 – Layne

+0

クライアントサイドコードを投稿できますか? –

関連する問題