сохранить входящий файл из s3 w / nodejs & knox? - PullRequest
3 голосов
/ 02 марта 2011

Это, вероятно, очень просто, потому что документы опускают это ... из knox docs:

"Ниже приведен пример запроса GET для файла, который мы только что отправили на s3, и просто выводит код состояния ответа, заголовки и тело. "

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 или облачного фронта и возвращает их размеры в соответствии с запросом.Затем браузер кэширует изображения с размером вместо полных прямо из s3.Конечно, мне нужно, чтобы этот базовый бит работал первым!Есть идеи?

Спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

В качестве альтернативы для ответа выше, вы можете сохранить входящий файл в буфер следующим образом:

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();
2 голосов
/ 03 марта 2011

Не похоже, что knox поддерживает потоковый API, поэтому вы не можете использовать stream.pipe () и получить правильное противодавление.Однако, скорее всего, ваш диск будет быстрее, чем S3, так что это, вероятно, не имеет значения.

В обратном вызове «response» откройте доступный для записи поток из модуля файловой системы с помощью var outstream = fs.createWriteStream(filename);.В обратном вызове «data» вызовите outstream.write(chunk); Надеемся, что существует обратный вызов «end», который вы также можете использовать для закрытия потока записи.

...