Как перенаправить обратно на страницу, когда неправильный тип файла был загружен через мультитер в NodeJS - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь обработать, если неправильный тип файла загружен через 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, он должен перенаправить обратно на страницу индекса с сообщением о состоянии «Файл успешно загружен» и сохранен в папке загрузки.

Если что-то еще, он перенаправляется обратно на главную страницу, но с сообщением об ошибкеговоря Тип файла не поддерживается.

1 Ответ

0 голосов
/ 06 июня 2019

Вам следует перезвонить при загрузке и затем проверить его в маршруте.Оттуда вы можете сделать перенаправление.Ниже код не может быть скопирован и вставлен.Это просто выражает способ реализации функции.Пример:

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' });
});
...