36 Stimmen

Node.js: wie kann man die Größe von HTTP-Anfragen und die Dateigröße beim Hochladen begrenzen?

Ich benutze Node.js und Express.

Ich möchte die Größe der HTTP-Anfragen begrenzen. Angenommen, wenn mir jemand eine HTTP-Anfrage größer als 2 MB sendet, möchte ich die Anfrage sofort stoppen. Ich habe den Code angesehen und ich denke, wenn ich den Kern ändere, kann ich das tun. Gibt es jedoch eine Möglichkeit, eine max_request_size oder etwas Ähnliches festzulegen?

Das hängt irgendwie mit meiner zweiten Frage zusammen. Ich verwende Express, um eine hochgeladene Datei von req.files zu erhalten. Gibt es eine Möglichkeit, das Schreiben der Datei in den /tmp-Ordner (was das Standard-Uploadverhalten ist) sofort zu stoppen, sobald die Dateigröße eine bestimmte Größe überschreitet?

0voto

Wakahiu Njenga Punkte 113

Verwenden Sie raw-body. Die meisten Middleware (wie limit) sind nicht mehr mit Express gebündelt und müssen separat installiert werden. Hier ist ein Beispiel.

var getRawBody = require('raw-body')
app.use(function (req, res, next) {
      getRawBody(
        stream = req,
        options = {
          length: req.headers['content-length'],
          limit: '100mb',
        },
        callback = function (err, reslt) {
          if (err) {
            return next(err)
          }
          next();
          console.log(req)
        })
    })
  • Vergessen Sie nicht, den Router nach dem app.use hinzuzufügen

Express erlaubt es nicht mehr, das Limit explizit mit der traditionellen Middleware festzulegen, wie unten gezeigt.

app.use(express.limit('4M'));

0voto

SUNDARRAJAN K Punkte 2179

Antwort für Frage 1:

Um die Größe der HTTP-Anfragen und die Upload-Dateigröße zu begrenzen, müssen wir das Limit des body-parser einstellen.

app.use(bodyParser.urlencoded({limit: '50mb',extended: true}));
app.use(bodyParser.json({limit: '50mb'}));

bodyParser.urlencoded

Die Dateien vom Frontend werden als urlcodierte Bodies übertragen.

Gibt Middleware zurück, die nur urlcodierte Bodies analysiert. Dieser Parser akzeptiert nur die UTF-8-Codierung des Bodys und unterstützt die automatische Dekomprimierung von gzip- und deflate-Codierungen.

Ein neues Body-Objekt mit den analysierten Daten wird nach der Middleware im Anfrageobjekt bereitgestellt (d.h. req.body). Dieses Objekt enthält Schlüssel-Wert-Paare, wobei der Wert ein String oder Array sein kann (wenn extended false ist) oder ein beliebiger Typ (wenn extended true ist).

bodyParser.json

Gibt Middleware zurück, die nur JSON analysiert. Dieser Parser akzeptiert jede Unicode-Codierung des Bodys und unterstützt die automatische Dekomprimierung von gzip- und deflate-Codierungen.

Ein neues Body-Objekt mit den analysierten Daten wird nach der Middleware im Anfrageobjekt bereitgestellt (d.h. req.body).

Hinweis: Standardmäßig beträgt das Eingabelimit für den Body-Parser 100kb

Antwort für Frage 2:

Um das Standard-Upload-Verzeichnis zu ändern, können wir folgendes verwenden.

app.set('uploadDir', './files');  // Legt das Upload-Verzeichnis auf den Ordner "files" in Ihrem Projekt fest.

Weitere Implementierung

Beim Einbinden des bodyParser in die App können wir das Upload-Verzeichnis angeben.

app.use(express.bodyParser({uploadDir:'./files', keepExtensions: true}));

Referenz:

Probleme: https://github.com/expressjs/express/issues/1684

Hoffentlich hilft dies!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X