javascript - expressjs tiedoston lähetys, tarkista, lähetettiinkö todella tiedosto, määritä maksimi tiedostokoko ja säilytä sen nimi
Työskenneltyäni Expressjs:n kanssa noin kuukauden ajan olen törmännyt tiedostojen latausongelmaan. Huolimatta Googlen ja erilaisten blogien konsultoinnista, en ole onnistunut löytämään vastausta seuraaviin kolmeen kysymykseen:
Mitä minun täytyy tehdä/mitä asetuksia bodyParserille minun täytyy valita, jotta:
Varmista, että tiedosto todella ladattiin (tällä hetkellä, kun lomaketta lähetetään valitsematta tiedostoa, luodaan tyhjä tiedosto).
Missä voin määrittää arvon tiedoston suurimman sallitun koon?
Kuinka voin jättää tiedoston nimenmuutoksen tekemättä?
Tällä hetkellä sisällytän bodyParserin express (v. 3.0.0) -sovellukseeni seuraavalla asetuksella:
{keepExtensions: true, uploadDir: __dirname + '/public/uploads'}
Vastaus #1
Juuri äskettäin törmäsin samanlaiseen ongelmaan. Kysymystä #2 varten katso 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?');
}
});
Vastaus #2
Huolestasi liittyen
Varmista, että tiedosto todella ladattiin (tällä hetkellä, kun lomaketta lähetetään valitsematta tiedostoa, luodaan tyhjä tiedosto).
Pitkän etsinnän jälkeen löysin loistavan ratkaisun
Ensin sinun täytyy asentaa node-formidable
Sitten kirjaston sisällyttämisen jälkeen tarkistaaksesi, onko tiedosto ladattu alun perinkään
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")
}
});
Ja koosta voit tarkistaa tämän.
form.maxFieldsSize = 2 * 1024 * 1024;
Parhain terveisin.
Abdulaziz Noor
