app.use(multer({dest:'./uploads/'}).single('photo')) return "Undefined is not a function"



我正在尝试使用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选项:onFileUploadStartonFileUploadComplete不再存在,rename现在是filename(但具有不同的异步函数签名)。

相关内容

最新更新