Как обслуживать статические файлы в 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,
Другие вопросы по тегам