ForgeTotal.js 5
nl

Total.js 5

Bestanden en streams naar de client sturen

Total.js 5 · total5@0.0.19 filesdownloadstream Uitgevoerd met Total.js 5

$.file(path, [download]) stuurt een bestand van schijf. Het content-type komt van de extensie. Geef true als tweede argument om de browser het bestand onder zijn eigen naam te laten downloaden, of een tekenreeks om de naam te kiezen (attachment; filename*=... wordt voor je ingesteld, veilig voor UTF-8). Een pad dat niet bestaat eindigt met de 404-pagina.

$.stream(type, stream, [download]) stuurt elke leesbare stream met het opgegeven content type: een gegenereerd bestand, het antwoord van een andere server of een database-export. Het stelt geen lengte in, dus het antwoord wordt in chunks verstuurd. PATH.public(), PATH.private() en PATH.tmp() bouwen absolute paden naar de projectmappen; bestanden in public/ worden al zonder route geleverd, gebruik $.file() dus voor bestanden die privé moeten blijven of eerst een controle nodig hebben.

controllers/download.js
const Fs = require('fs');

exports.install = function() {
	ROUTE('GET /report/', report);
	ROUTE('GET /report/save/', report_save);
	ROUTE('GET /export/', export_csv);
	ROUTE('GET /missing/', missing);
};

function filepath() {
	var filename = PATH.tmp('report.txt');
	Fs.writeFileSync(filename, 'Total.js report\n');
	return filename;
}

function report($) {
	$.file(filepath());
}

function report_save($) {
	$.file(filepath(), 'my report.txt');
}

function export_csv($) {
	var stream = Fs.createReadStream(filepath());
	$.stream('text/csv', stream, 'export.csv');
}

function missing($) {
	$.file(PATH.tmp('does-not-exist.txt'));
}