用node.js上传文件,得到多个文件

我有这个代码,以便上传单个文件与node.js,使用快递和MULTER:

var express = require("express"); var app = express(); var fs = require("fs"); var multer = require('multer'); var upload = multer({ dest: 'uploads/' }); // Process upload file app.post('/file_upload', upload.single('single-file'), function(request, response) { var fileName = request.file.originalname; var filePath = request.file.path; var file = __dirname + "/uploads/" + fileName; fs.readFile(filePath, function(err, data) { fs.writeFile(file, data, function(err) { if (err) { console.log(err); } else { responseData = { 'message' : 'File uploaded successfully', 'fileName' : fileName }; } response.end(JSON.stringify(responseData)); }) }); }); 

这是HTML文件:

 <!DOCTYPE html> <html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="http://localhost:8081/file_upload" method="POST" enctype="multipart/form-data"> <input type="file" name="single-file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html> 

运行代码后,我能够上传文件。 但问题是,我不断收到2个file upload到我的“上传”文件夹每次。 一个文件与原来的名字,和一个奇怪的名字,如2787ab2db292d90bd2da83a6a6ce1700。

这是正常的吗? 上传时如何摆脱其他文件?

问题是你正在从已经上传的文件中创build新的文件。
所以解决办法是用临时名称将上传的文件重命名为原始名称:

 var express = require("express"); var app = express(); var fs = require("fs"); var multer = require('multer'); var uploadsFolder = __dirname + '/uploads/'; // defining real upload path var upload = multer({ dest: uploadsFolder }); // setting path for multer // Process upload file app.post('/file_upload', upload.single('single-file'), function(request, response) { var fileName = request.file.originalname; // original file name var file = request.file.path; // real file path with temporary name // renaming real file to it's original name fs.rename(file, uploadsFolder + fileName, function (err) { if (err) { console.log(err); response.json({success:false, message: err}); return; } response.json({success:true, message: 'File uploaded successfully', fileName: fileName}); }); }); 

或者让裁剪上传到临时文件夹,然后复制或移动上传文件夹:

安装fs extra:

 npm install --save fs.extra 

 var express = require("express"); var app = express(); var fs = require('fs.extra'); // extra functionality var multer = require('multer'); var uploadsFolder = __dirname + '/uploads/'; // defining real upload path var tempFolder = __dirname + '/tmp/'; // folder for temporary files, must exist var upload = multer({ dest: tempFolder }); // setting path for multer // Process upload file app.post('/file_upload', upload.single('single-file'), function(request, response) { var fileName = request.file.originalname; // original file name var file = request.file.path; // real file path with temporary name // renaming real file to it's original name fs.move(file, uploadsFolder + fileName, function (err) { if (err) { console.log(err); response.json({success:false, message: err}); return; } response.json({success:true, message: 'File uploaded successfully', fileName: fileName}); }); });