app.use(multer({dest:'./ uploads /'})。single('photo'))返回“未定义不是函数”

时间:2015-12-20 09:11:23

标签: node.js multer

我正在尝试使用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'));

并且它一直返回“Undefined is not a function” (指的是.single())

如果我将.single删除 multer({ dest: 'uploads/' });

此错误消息已消失,但当然文件本身变为未定义,然后没有上传任何内容。

一天工作,伙计! 显然需要帮助:'(

2 个答案:

答案 0 :(得分:1)

这就是我使用<VirtualHost *ipaddress*:*port*> DocumentRoot "/var/www/apigility/public" <Directory "/var/www/apigility/public"> AllowOverride All Order deny,allow Allow from all </Directory> </VirtualHost> 的方式,希望这有助于您: (创建一个目录并使用每个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

这对我来说很有效,希望你也可以适应它。我理解沮丧,因为它也花了一些时间才能做对。

答案 1 :(得分:1)

您安装了旧版本。您尝试使用的API仅在最新版本中引入(可能从v1.0.0开始)。

您可能会检查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"); }); } }]); 是否限制安装了package.json的版本。

我还应该指出,升级时需要稍微修改multer个选项:multeronFileUploadStart不再存在,onFileUploadComplete现在是{ {1}}(但使用不同的异步函数签名)。