开发者

save incoming file from s3 w/nodejs & knox?

This is likely very basic because the docs leave it out... from knox docs:

"Below is an example GET request on the file we just shoved at s3, and simply outputs the response status code, headers, and body."

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();

Easy enough, but how do I save the incoming data as a local file? new BufferList() or something?

I'm trying to build an 'on-the-fly' image resizing service that loads images from s3 or cloudfront and returns them sized based on the 开发者_如何学JAVArequest. The browser then caches the sized images instead of the full ones straight from s3. Of course, I need this basic bit working first! Any ideas?

Thanks guys!


It doesn't look like knox supports the stream API, so you can't use stream.pipe() and get proper backpressure. However, chances are your disk will be faster than S3, so this probably doesn't matter.

In the "response" callback, open up a writable stream from the filesystem module with var outstream = fs.createWriteStream(filename);. In the "data" callback, call outstream.write(chunk); Hopefully there is a "end" callback you can use the close the write stream as well.


As an alternative to answer above, you can save the incoming file to buffer like this:

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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜