Wysyłaj pliki i strumienie do klienta
$.file(path, [download]) wysyła plik z dysku. Nagłówek content-type wynika z rozszerzenia. Przekaż true jako drugi argument, aby przeglądarka pobrała plik pod jego własną nazwą, lub ciąg znaków, aby wybrać nazwę (attachment; filename*=... ustawiane jest za Ciebie, bezpiecznie dla UTF-8). Ścieżka, która nie istnieje, kończy się stroną 404.
$.stream(type, stream, [download]) wysyła dowolny czytelny strumień z podanym typem zawartości: wygenerowany plik, odpowiedź innego serwera lub eksport z bazy danych. Nie ustawia długości, więc odpowiedź jest przesyłana we fragmentach. PATH.public(), PATH.private() i PATH.tmp() budują ścieżki bezwzględne do folderów projektu; pliki w public/ są już serwowane bez żadnej trasy, więc $.file() używaj dla plików, które mają pozostać prywatne albo wymagają wcześniejszego sprawdzenia.
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'));
}