javascript - expressjs nahrávanie súborov, skontrolovať, či bol skutočne odoslaný súbor, určiť maximálnu veľkosť súboru a zachovať jeho názov


Pracujem s Express.js približne mesiac a narazil som na problém s nahrávaním súborov. Napriek tomu, že som konzultoval Google a rôzne blogy, nepodarilo sa mi nájsť odpoveď na nasledujúce tri otázky:

Čo musím urobiť/aké nastavenia pre bodyParser si musím zvoliť, aby som:

  1. Uistite sa, že bol skutočne nahraný súbor (v súčasnosti, keď sa formulár odošle bez výberu súboru, vytvorí sa prázdny súbor).

  2. Kde môžem určiť hodnotu pre maximálnu veľkosť súboru, ktorú môže súbor mať?

  3. Ako môžem vynechať premenovanie súboru?

Momentálne zahrňujem bodyParser do mojej aplikácie express (verzia 3.0.0) s nasledujúcou možnosťou:

{keepExtensions: true, uploadDir: __dirname + '/public/uploads'}

Odpoveď č. 1

Nedávno som narazil na podobný problém. Pre otázku č. 2 skontrolujte http://www.senchalabs.org/connect/middleware-limit.html

app.use(express.limit('4M')); // in your app.configure()
app.post('/upload', function(req, res) {
    var fs = require('fs'),
        file = req.files.myfile; //your file field;


    if(file.size === 0) { // question #1
        fs.unlinkSync(file.path);
        res.redirect('/error?');
    } else { //question #3
        var fn = file.path.split('/');
        fs.rename(file.path, file.path.replace(fn[fn.length-1], file.name));
        res.redirect('/success?');
    }
});

Odpoveď č. 2

O vašom znepokojení

Uistite sa, že bol skutočne nahraný súbor (v súčasnosti, keď sa formulár odošle bez výberu súboru, vytvorí sa prázdny súbor).

Po dlhom hľadaní som našiel skvelé riešenie

Najprv musíte nainštalovať node-formidable

Potom po zahrnutí knižnice, skontrolovať, či súbor bol nahraný na prvom mieste

var form = new formidable.IncomingForm();

form.parse(req, function(err, fields, files) {
  if (Object.keys(files).length !== 0) {
    console.log("File exists")
  } else {
    console.log("File does not exist")
  }
});

A ohľadom veľkosti si môžete toto skontrolovať.

form.maxFieldsSize = 2 * 1024 * 1024;

S pozdravom.

Abdulaziz Noor