【问题标题】:Can't open multer uploaded files无法打开multer上传的文件
【发布时间】:2017-10-03 03:58:23
【问题描述】:

嘿,有人遇到过这个问题吗?我正在尝试使用 multer(用于发送它们的邮递员)上传图像。较小的文件 ~50Kb 仅显示为空文本/纯文件,较大的 ~2.1Mb 图像被上传,但它们的大小不同(从原始 2087736 字节到 2023146),我无法为 PNG 打开它们->(错误不是 png 文件)在 jpeg 情况下 -> (不是 JPEF 文件:以 0x8d 0x35 开头)。

在 multer 方面,我使用了一些过滤并有一些限制:

var photoUpload = multer({ storage: phtStorage, fileFilter: photoFilter, limits: limits }).single('file');

但他们并没有什么不同寻常的地方

过滤器:

var photoFilter = function(req, file, cb) {

if (settings.acceptedPhotoTypes.indexOf(file.mimetype) !== -1)
    cb(null, true);
else
    cb('Invalid file type', false);
};

存储:

var phtStorage = multer.diskStorage({
    destination: function (req, file, cb) {
        var path = settings.photoProcessingSrcDir;
        mkdirp(path, err => cb(err, path));
        cb(null, path);
    },
    filename   : function (req, file, cb) {
        cb(null, req.fileName.toString());
    }
});

限制:

var limits = { fileSize: 20000000 };

我唯一要做的就是将函数 photoUpload 传递给另一个函数,因为我想在实际上传之前进行一些数据库验证。

router.post('/:catalogId/:storeId', protected, function(req, res, next) {

  if (f.type === 'photo') { 
    require('../helpers/files/post-photo')(photoUpload, req, res, next); 
  }

});

【问题讨论】:

    标签: image express multer


    【解决方案1】:

    我终于找到了问题所在。存储函数写得不好:

    var phtStorage = multer.diskStorage({
        destination: function (req, file, cb) {
            var path = settings.photoProcessingSrcDir;
      ----> mkdirp(path, err => cb(err, path));
      ----> cb(null, path);
        },
        filename   : function (req, file, cb) {
            cb(null, req.fileName.toString());
        }
    });
    

    两个 cb(回调函数)都被调用,导致 multers 内部流创建函数创建两个流。这真的把事情搞砸了......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多