【问题标题】:How to redirect back to a page when wrong file type has been uploaded via multer in NodeJS当通过NodeJS中的multer上传错误的文件类型时如何重定向回页面
【发布时间】:2019-06-05 16:39:04
【问题描述】:

我正在尝试处理是否通过 multer 上传了错误的文件类型,以重定向回主页,并将错误消息存储在传递的变量中。

在上传常量的 fillFilter 中,我尝试使用 app.post 重定向到页面,但这不起作用。我试图处理发布响应中的回调错误,但它做了同样的事情。同样,我看不到太多关于我需要什么的文档,所以很难弄清楚我所做的语法是否会导致问题。

const express = require("express");
const app = express();
const path = require('path');
const multer = require("multer");

const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './uploads/')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname)
    }
})

const upload = multer({
    storage: storage,
    limits: {fileSize: 25000000}, //works with bytes, created a 25MB limit
    fileFilter: (req, file, callback) => {
        console.log(file.originalname)
        let ext = path.extname(file.originalname);
        if(ext !== '.zip') {
            return callback(new Error('Only Zips are allowed'))
            //Need to modify this to redirect?
        }
        callback(null, true) 
    }
}) 

app.get('/', function (req, res) {
    res.render("index");
})

app.post('/', upload.single('fileUpload'), function (req, res) {
        res.render("index", {postStatus : "File Succesfully Uploaded"}); 
});

如果输入了正确的格式(在本例中为 zip),它应该重定向回索引页面,并显示一条状态消息:文件已成功上传,并存储在上传文件夹中。

如果有其他问题,它会重定向回主页,但会显示一条错误消息,指出不支持文件类型。

【问题讨论】:

    标签: node.js express zip pug multer


    【解决方案1】:

    您应该在上传时返回一个回调,然后在路由中检查它。从那里你可以做重定向。下面的代码不能复制和粘贴。它只是表达了功能应该实现的方式。 例如:

    const upload = function(storage, callback) {
      multer({
        storage: storage,
        limits: { fileSize: 25000000 }, //works with bytes, created a 25MB limit
        fileFilter: (req, file, callback) => {
          console.log(file.originalname);
          let ext = path.extname(file.originalname);
          if (ext !== '.zip') {
            return callback(new Error('Invalid File Type ' + username));
          }
          callback(null, true);
        }
      });
    };
    
    app.post('/', function(req, res, next) {
    //Check call back here
    //if error do the redirect with error message
    
    //else
      res.render('index', { postStatus: 'File Succesfully Uploaded' });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2017-09-20
      • 2019-09-04
      相关资源
      最近更新 更多