Envoyer des fichiers et des flux au client
$.file(path, [download]) envoie un fichier du disque. Le content-type vient de l'extension. Passez true en deuxième argument pour que le navigateur télécharge le fichier sous son propre nom, ou une chaîne pour choisir le nom (attachment; filename*=... est défini pour vous, compatible UTF-8). Un chemin qui n'existe pas se termine par la page 404.
$.stream(type, stream, [download]) envoie n'importe quel flux lisible avec le type de contenu indiqué : un fichier généré, la réponse d'un autre serveur ou un export de base de données. Il ne fixe pas de longueur, la réponse est donc envoyée par morceaux. PATH.public(), PATH.private() et PATH.tmp() construisent des chemins absolus vers les dossiers du projet ; les fichiers de public/ sont déjà servis sans aucune route, utilisez donc $.file() pour les fichiers qui doivent rester privés ou nécessitent une vérification préalable.
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'));
}