node.js - app.use(multer({dest :'./uploads/' }).single ('photo' )) 返回 "Undefined is not a function"

标签 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'));

并且它不断返回“未定义不是函数” (引用 .single() )

如果我删除 .single 到 multer({ dest: '上传/' });

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

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

最佳答案

这就是我使用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");
            });
    }
}]);

这对我来说非常有效,希望你也能适应它。我理解这种挫败感,因为我也花了一些时间才恢复正常。

关于node.js - app.use(multer({dest :'./uploads/' }).single ('photo' )) 返回 "Undefined is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379476/

相关文章:

javascript - 控制字符的 Socket.IO 问题

javascript - 如何修复nodejs Express服务器中的 "MulterError: Unexpected field"?

javascript - 当客户端互联网关闭时的 Socket.io

javascript - 不能使用命名空间 'Boom' 作为类型

node.js - 在同一 POST 请求上使用 multer (NodeJS) + 其他表单数据上传文件 (Angular)

javascript - 使用 express.js 和 multer 使用 ajax 进行简单的多部分文件上传

typescript - NestJS - 如何将图像上传到 aws s3?

node.js - NodeJs Multer 错误

node.js - package.json 中的所有包都包含在 React 构建中吗?

javascript - 如何在 for 循环中等待异步查询完成?