重命名后如何在 node.js 中提供静态文件?
How to serve static files in node.js after renaming them?
我正在创建一个 node.js 应用程序,用户可以在其中上传文件并稍后下载。
我将文件信息(用户上传的原始文件名,...)存储在 mongodb 文档中,并将该文件命名为与 mongodb 文档 ID 相同的文件。现在我希望我的用户能够使用原始文件名下载该文件。
我想知道的是当用户在 http://myapp.com/mongoDocument_Id 上发送 GET 请求时
用户得到一个名为 myOriginalfile.ext
的文件
我知道节点静态和其他模块,但我无法在发送文件之前重命名它们。
我正在使用 koa.js 框架。
这是一个使用 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 id 作为文件名
- 一个用户请求http://myapp.com/123456
- 您在 MongoDB 中查找该 ID 以找出原始文件名(在上面的示例中,文件名只是硬编码为
test.txt
)
- 文件
./static/123456
使用 Content-Disposition
header 中设置的原始文件名(通过使用 this.attachment(filename)
)作为下载提供,这将使浏览器存储它在本地作为 test.txt
而不是 123456
.
我正在创建一个 node.js 应用程序,用户可以在其中上传文件并稍后下载。 我将文件信息(用户上传的原始文件名,...)存储在 mongodb 文档中,并将该文件命名为与 mongodb 文档 ID 相同的文件。现在我希望我的用户能够使用原始文件名下载该文件。
我想知道的是当用户在 http://myapp.com/mongoDocument_Id 上发送 GET 请求时 用户得到一个名为 myOriginalfile.ext
的文件我知道节点静态和其他模块,但我无法在发送文件之前重命名它们。
我正在使用 koa.js 框架。
这是一个使用 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 id 作为文件名 - 一个用户请求http://myapp.com/123456
- 您在 MongoDB 中查找该 ID 以找出原始文件名(在上面的示例中,文件名只是硬编码为
test.txt
) - 文件
./static/123456
使用Content-Disposition
header 中设置的原始文件名(通过使用this.attachment(filename)
)作为下载提供,这将使浏览器存储它在本地作为test.txt
而不是123456
.