3

这可能是非常基本的,因为文档将其排除在外……来自 knox 文档:

“下面是我们刚刚推送到 s3 的文件的示例 GET 请求,并简单地输出响应状态代码、标题和正文。”

client.get('/test/Readme.md').on('response', function(res){
  console.log(res.statusCode);
  console.log(res.headers);
  res.setEncoding('utf8');
  res.on('data', function(chunk){
    console.log(chunk);
  });
}).end();

很简单,但是如何将传入的数据保存为本地文件?新的 BufferList() 还是什么?

我正在尝试构建一个“即时”图像大小调整服务,该服务从 s3 或 cloudfront 加载图像并根据请求返回它们的大小。然后浏览器缓存大小的图像,而不是直接来自 s3 的完整图像。当然,我首先需要这个基本的工作!有任何想法吗?

多谢你们!

4

2 回答 2

2

看起来 knox 不支持流 API,因此您不能使用 stream.pipe() 并获得适当的背压。但是,您的磁盘可能会比 S3 更快,因此这可能无关紧要。

在“响应”回调中,从文件系统模块打开一个可写流,使用var outstream = fs.createWriteStream(filename);. 在“数据”回调中,调用outstream.write(chunk); 希望有一个“结束”回调,您也可以使用关闭写入流。

于 2011-03-03T07:04:22.263 回答
2

作为上述答案的替代方法,您可以将传入文件保存到缓冲区,如下所示:

var buffer = '';
client.get('/test/Readme.md').on('response', function(res){

  res.setEncoding('utf8');

  res.on('data', function(chunk){
    buffer += chunk;
  });

  res.on('end', function(){
    // do something with the buffer such as save it to file, 
    // or directly resize the image here.
    // eg. save to file:
    fs.writeFile('downloaded_readme.md', buffer, 'utf8', function (err) {
    });
  });

}).end();
于 2011-08-29T20:24:18.723 回答