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:
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).
Kde môžem určiť hodnotu pre maximálnu veľkosť súboru, ktorú môže súbor mať?
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
