クライアントからノードサーバーにファイルをアップロードする必要があります(このタスクを実行するにはMulterを使用します)。Multerを使用してNodeJsにファイルをアップロードし、ファイルがすでに存在する場合は名前を変更してください。
同じ名前のファイルがすでにサーバー上に存在する場合は、新しいファイルの名前を変更する必要があります。 Node fs.statを使って、同じ名前のファイルが存在するかどうかを調べます。
fs.statは、実際には同じ名前のファイルが存在しないことを常に教えているので、私は間違っている必要があります(私は古いファイルを上書きしてしまいます)。
ここにコードがあります。
var imagesDirectory = 'images';
var imageDir = '/' + imagesDirectory + '/';
var storageDisk = multer.diskStorage({
destination: imagesDirectory,
filename: function (req, file, callback) {
let uploadedFileName;
fs.stat(imageDir + file.originalname, function(err, stat) {
if (err==null) {
uploadedFileName = Date.now() + '.' + file.originalname;
} else if(err.code == 'ENOENT') {
uploadedFileName = file.originalname;
} else {
console.log('Some other error: ', err.code);
}
callback(null, uploadedFileName)
});
}
})
var uploadImage = multer({ storage: storageDisk, limits: {fileSize: 1000000, files:1}, }).single('imageFile');
router.post('/image', function(req, res) {
uploadImage(req, res, function (err) {
if (err) {
// An error occurred when uploading
console.log(err);
}
// do something to prepare the response and send it back to the client
prepareResponseAndSendItBack(req.file.filename, imageDir, res, err);
})
})
あなたが/ ... ''のFSに '/画像を渡している実現します。 stat() 'そうですか?そのパスはファイルシステム上の絶対パスであり、パブリックディレクトリに関連するURLパスではありません。 '/ usr'、'/lib'などと並んで、あなたのファイルシステムのルートに実際にディレクトリが存在することを確かめますか? – mscdex
Thx。私は実現していなかった。最初の '/'を削除した後、すべてが期待通りに機能します。 – Picci