3

当请求进入页面时,例如app.get("/")我想从亚马逊 s3 返回一个静态 HTML 页面。我知道我可以从 S3 请求它然后发送它,但这似乎很慢。无论如何告诉请求者直接从s3获取文件而不更改url?

谢谢。

如果做不到这一点,从 s3 提供文件的最快方法是什么?

本教程显示首先编写文件

http://www.hacksparrow.com/node-js-amazon-s3-how-to-get-started.html

// We need the fs module so that we can write the stream to a file
var fs = require('fs');
// Set the file name for WriteStream
var file = fs.createWriteStream('slash-s3.jpg');
knox.getFile('slash.jpg', function(err, res) {
    res.on('data', function(data) { file.write(data); });
    res.on('end', function(chunk) { file.end(); });
});

有没有办法在不先写的情况下发送文件?写起来似乎很慢。

4

2 回答 2

12

正如您所怀疑的,您无法在不更改 URL 的情况下让请求者直接从 S3 获取。您必须代理远程页面:

var http = require('http'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
  http.get('http://www.stackoverflow.com', function(proxyRes) {
    proxyRes.pipe(res);
  });
});

app.listen(8080);

您可以缓存远程页面以获得更好的性能。

于 2012-08-06T10:44:37.780 回答
0

如果 s3 页面是真正静态的(例如很少更改),您的服务器当然可以在第一次请求它时加载它并缓存它;这不会导致任何明显的放缓。

否则,我会重新考虑“不更改 URL”的要求;最常见的“解决方案”是通常涉及框架的黑客攻击。

于 2012-07-15T02:43:23.873 回答