我正在尝试通过我的节点服务器从Amazon S3服务器管道图像,同时为响应添加自定义标头。
但是,现在,服务器将使用简单的“文档”进行响应,该文档将下载到我的计算机而未声明文件扩展名。 “文档”仍然包含所需的图像数据,但是如何清楚地表明这是一个可以在我的浏览器中查看的PNG?
这是我目前的代码:
app.get('/skin', function (req, res) {
res.writeHead(200, {'Content-Type': 'image/png', 'access-control-allow-origin': '*'});
http.get("http://s3.amazonaws.com/MinecraftSkins/clone1018.png").pipe(res);
});
答案 0 :(得分:1)
您可能希望使用http.request以便使用重复的标头进行良好的代理和资源加载 以下是express中将侦听端口8080的示例,并将使用您从/ skin / * route请求的实际URL请求特定服务器:
var http = require('http'),
express = require('express'),
app = express();
app.get('/skin/*', function(req, res, next) {
var request = http.request({
hostname: 's3.amazonaws.com',
port: 80,
path: '/' + req.params[0],
method: req.method
}, function(response) {
if (response.statusCode == 200) {
res.writeHead(response.statusCode, response.headers);
response.pipe(res);
} else {
res.writeHead(response.statusCode);
res.end();
}
});
request.on('error', function(e) {
console.log('something went wrong');
console.log(e);
})
request.end();
});
app.listen(8080);
要测试它,请在您的计算机上运行,然后转到:http://localhost:8080/skin/nyc1940/qn01_GEO.png
它将从Amazon加载代理图像,并返回其标题。您也可以自定义标头,以防止从S3发送XML(当文件不存在时)。
你不需要设置任何标题,因为它们是从s3.amazon代理的,它确实可以为你设置正确的标题。
也不是access-control-allow-origin
,因为只有在AJAX请求来自其他域名的资源的情况下才需要它。但无论如何,在发送之前可以随意修改response.headers
。它是简单的对象(用于测试的console.log)。