最初のファイルが正常に処理された後に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つずつ複数のファイルをアップロードできることです。
(多少の誤差が可能であり、私はこのコードをテストしていない)、これは代わりにfs.renameで使用してみてください? –
お詫び申し上げます。更新されたオリジナルの投稿。 – Layne