重命名后如何在node.js中提供静态文件?

时间:2015-06-10 10:31:24

标签: javascript node.js koa node-static

我正在创建一个node.js应用程序,用户可以在其中上传文件,以后可以下载。 我在mongodb文件中存储文件信息(用户上传的原始文件名,...),并将该文件命名为mongodb文件id。现在我希望我的用户能够使用原始文件名下载该文件。

我想知道的是当用户在http://myapp.com/mongoDocument_Id上发送GET请求时 user获取名为myOriginalfile.ext的文件

我知道node-static和其他模块,但我不能在发送文件之前重命名它们。

我正在使用koa.js框架。

1 个答案:

答案 0 :(得分: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);

简而言之:

  • 使用MongoDB id作为文件名
  • 将文件存储在./static
  • 用户请求http://myapp.com/123456
  • 你在MongoDB中查找该ID以找出原始文件名(在上面的例子中,文件名只是硬编码到test.txt
  • 文件./static/123456使用Content-Disposition标头中设置的原始文件名(使用this.attachment(filename))作为下载提供,这将使浏览器将其本地存储为{{1而不是test.txt