我正在尝试使用multer上传文件
我使用最新的multer(v.0.18)
我以这种方式配置应用程序
var express = require('express')
, multer = require('multer')
, app = express()
, routes = require('./routes');
app.use(multer({ dest: './uploads/',
rename: function (fieldname, filename) {
return filename+Date.now();
},
onFileUploadStart: function (file) {
console.log(file.originalname + ' is starting ...')
},
onFileUploadComplete: function (file) {
console.log(file.fieldname + ' uploaded to ' + file.path)
done=true;
}
}).single('photo'));
并且不断返回"未定义不是函数"(指.single())
如果我将.sone删除到
multer({ dest: 'uploads/' });
这个错误消息已经消失,但文件本身当然变得未定义,然后什么都不上传。
干一整天,伙计!显然需要帮助:'(
这就是我使用multer
的方式,希望这能帮助您:(创建一个目录,并在每次POST
请求时将图片添加到其中)
这是在routes.js
(或您发布代码的文件的任何名称)中:
var storage = multer.diskStorage( {
destination: function (req, file, cb) {
var destFolder =__dirname + '/../uploads/' + req.params.id;
//create folder if does not exists
if (!fs.existsSync(destFolder)) {
fs.mkdirSync(destFolder);
}
//set folder where files will be populated
cb(null, destFolder)
},
filename: function (req, file, cb) {
//set the names file within the folder
//as the original name of the file
cb(null,file.originalname);
}
});
然后我使用一个服务(fileUploadService.js
)这样调用它:
app.service('fileUpload', ['$http', function ($http) {
this.uploadFileToUrl = function (files, uploadUrl) {
var fd = new FormData();
for (var i = 0; i < files.length; i++) {
fd.append('file', files[i]);
}
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
})
.success(function () {
console.log("images files upload success");
})
.error(function () {
console.log("images files upload fail");
});
}
}]);
这对我来说非常有效,希望你也能适应。我理解这种沮丧,因为我也花了一些时间才恢复正常。
您安装了一个旧版本。您尝试使用的API仅在最近的版本中引入(可能从v1.0.0开始)
您可以检查package.json
是否没有限制安装multer
的版本。
我还应该指出,在升级时,您需要稍微修改multer
选项:onFileUploadStart
和onFileUploadComplete
不再存在,rename
现在是filename
(但具有不同的异步函数签名)。