2015-06-10 2 views
1

Я создаю приложение node.js, в котором пользователь может загружать файлы и может загрузить их позже. Я храню информацию о файле (исходное имя файла, которое было загружено пользователем, ...) в документе mongodb и назвал этот файл таким же, как идентификатор документа mongodb. Теперь я хочу, чтобы мой пользователь мог загрузить этот файл с исходным именем файла.Как обслуживать статические файлы в node.js после их переименования?

Что я хочу знать, когда пользователь отправляет запрос GET на http://myapp.com/mongoDocument_Id пользователя получает файл с именем myOriginalfile.ext

Я знаю о узловых-статических и других модулях, но я не могу переименовать их перед отправкой файл.

Я использую рамки koa.js.

ответ

0

Вот простой пример использования 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.
+0

Спасибо за ваш ответ, я застрял в этом на 6 часов. –

+0

Также это был мой первый вопрос о stackoverflow, поэтому не ожидал такой быстрой реакции. Спасибо –

+0

@varungupta, что вы очень радушны = D – robertklep