【发布时间】:2016-05-04 19:52:47
【问题描述】:
我有一个功能齐全的 PHP 应用程序,我正在尝试制作它的 Node.js 版本。它处理服务图像图块。当它准备好显示图像时:
// Stream out the image
echo self::$tile;
如何在 Node.js 中做类似的事情?我知道这是一个广泛的问题,但我认为我最大的问题是我不了解 PHP 如何“回显”图像。
详情:
我正在使用 AWS 来获取图像。 AWS 调用返回一个缓冲区。此时,在 Javascript 中,我将图像保留为缓冲区。
该站点使用平铺图像填充地图,因此有多个调用将图像放置在页面上的特定位置。我正在使用 express 来处理请求。
app.get(/^\/omb\/1.0.0\/(.+)\/(.+)\/(.+)\/(.+)\.[a-zA-Z]*$/, function(req, res){
var MosaicStreamer = require('./models/MosaicStreamer.js');
var ms = new MosaicStreamer;
var configs = {library: req.params[0], zoom: req.params[1], column: req.params[2], row: req.params[3]};
ms.handleTile(configs);
});
handleTile 抓取图像并最终将我带到现在的位置。使用以下方法抓取图像:
var aws = new AWS.S3();
var params = {
Bucket: this.bucket,
Key: this.tileDirectory + this.filepath,
Range: 'bytes=' + (this.toffset + 4) + "-" + (this.tsize + this.toffset + 4)
};
var ts = this;
aws.getObject(params, function(err, data){
if(ts.tile == null){
ts.tile = data.Body; //S3 get object
}
}
【问题讨论】:
-
我们能看到创建
self::$title的代码吗?或者,我们可以看看self::$title是如何被使用的吗?它是base64编码的图像吗?您是否将其结果直接烘焙到浏览器响应中并修改标头,这是 BLOB 吗?回答完这些问题后,我们可以提供建议。 -
@Ohgodwhy,好吧,我会尽力而为!我将编辑问题
-
当您使用
echo时,PHP 所做的是将输出(在本例中为二进制内容)写入输出缓冲区,该缓冲区通过 Web 服务器连接到请求资源的浏览器。在 node.js 中通过将二进制数据写入请求的“响应流”来完成相同的概念。由于您可能已经通过多种方式实现了请求处理,因此我们需要更详细地了解您正在使用的堆栈(例如 express、api、http 模块等),最好使用一些示例代码。 -
@RogierSpieker 在帖子中添加了一些细节。我正在使用
express。所以从你的意思来看,我猜我需要在路由中做一些事情来处理图像? -
您是否在 AWS 实例中使用 S3 存储桶?
标签: javascript php node.js image echo