複数のファイルをアップロードして元の名前に戻すには、multerを使用することを考えました。以下はサンプルコードです複数のファイルをアップロードし、node.jsのmulterで名前を変更
var express = require('express');
var app = express();
var fs = require("fs");
var multer = require('multer');
app.use(express.static('public'));
var upload = multer({ dest: './upload/' });
app.get('/index.html', function (req, res) {
res.sendFile(__dirname + "/" + "index.html");
})
app.post('/file_upload', upload.array('theFile', 2), function (req, res, next) {
var errorcode = 0;
for (var i = 0; i < req.files.length; i++) {
fs.rename(req.files[i].path, req.files[i].destination + req.files[i].originalname, function (err) {
errorcode = err;
}(i));
}
if (errorcode != 0) {
console.log("errorcode is " + errorcode);
res.sendStatus(500);
return;
} else {
res.json({
message: 'File uploaded successfully',
});
}
})
var server = app.listen(8089, function() {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
私はWindowsサーバー上で上記のコードをテストしています。私の見解では、ファイルは正常にアップロードできますが、fs.rename()はエラー「1」を返し続けます。そして、ターゲットフォルダ内の名前が変更されたファイルは常に1Kbです。リネーム機能はまだアップロードされている可能性があるファイルを取得しようとしているようです。私の理解が正しいかどうかはわかりません。もしそうなら、ファイルが完全にアップロードされているかどうかを判断する方法はありますか?私の問題に対する提案はありますか?
ありがとうございました。私はMulterの組み込み機能を試したところ、期待どおりに動作しました。ところで、あなたは、ファイルがマルターでダウンロードされたことを確認する方法があるかどうか知っていますか? – Liang
@Liangあなたの 'app.post'ルートに到達すると、それは完了です。 https://github.com/expressjs/multer/issues/360#issuecomment-231001064およびhttp://stackoverflow.com/a/30458411/3714913 – Nateowami
を再度ご覧ください。上記の2つの投稿からはっきりと聞こえます。しかし、私はまだそれを疑っています。 「興味深いことに、このファイルは、あなたが展開した時点では利用できなかったようだ」と語った。 – Liang