Как обслуживать статические файлы в node.js после их переименования?
Я создаю приложение node.js, в которое пользователь может загружать файлы и загружать их позже. Я храню информацию о файле (оригинальное имя файла, загруженного пользователем,...) в документе mongodb и назвал этот файл так же, как и идентификатор документа mongodb. Теперь я хочу, чтобы мой пользователь мог загрузить этот файл с оригинальным именем файла.
Я хочу знать, когда пользователь отправляет запрос GET на http://myapp.com/mongoDocument_Id пользователь получает файл с именем myOriginalfile.ext.
Я знаю о node-static и других модулях, но не могу переименовать их перед отправкой файла.
я использую фреймворк koa.js.
1 ответ
Решение
Вот простой пример использования koa-file-server
:
var app = require('koa')();
var route = require('koa-route');
var send = require('koa-file-server')({ root : './static' }).send;
app.use(route.get('/:id', function *(id) {
// TODO: perform lookup from id to filename here.
// We'll use a hardcoded filename as an example.
var filename = 'test.txt';
// Set the looked-up filename as the download name.
this.attachment(filename);
// Send the file.
yield send(this, id);
}));
app.listen(3012);
Короче:
- файлы хранятся в
./static
используя идентификатор MongoDB в качестве имени файла - пользователь запрашивает http://myapp.com/123456
- Вы ищите этот идентификатор в MongoDB, чтобы узнать оригинальное имя файла (в приведенном выше примере имя файла просто жестко закодировано в
test.txt
) - файл
./static/123456
предлагается для загрузки с использованием исходного имени файла, заданного вContent-Disposition
заголовок (используяthis.attachment(filename)
), что заставит браузер хранить его локально какtest.txt
вместо123456
,