Получение бинарных файлов с помощью колыбелей getAttachment из CouchDB? - PullRequest
3 голосов
/ 11 июля 2011

Я загрузил png как приложение к базе данных CouchDb. Когда я смотрю на него через Futon, все нормально, если я пытаюсь вернуть его через колыбель, он поврежден. Я использовал фрагмент из crade-test.js, поставляемого с crade, и немного его изменил:

      var response = {};
      var streamer = db.getAttachment(data.id,filename);
      streamer.addListener('response', function (res) {
        response.headers = res.headers;
        response.headers.status = res.statusCode;
        response.body = "";
      });
      streamer.addListener('data', function (chunk) { response.body += chunk; });
      streamer.addListener('end', function () {
        fs.writeFile('new-'+filename, response.body, function (err) {
          if (err) throw err;
            console.log('It\'s saved!');
          });
        });

Результатом является поврежденный png, который больше, чем ввод. Я привел рабочий пример здесь: http://jsfiddle.net/x8GZc/

1 Ответ

1 голос
/ 26 июля 2011

Фрагмент, который вы нашли, используется с текстовым документом (= в основном строка).Для двоичных данных (например, изображений) вы должны установить правильную кодировку для объекта ответа:

stream = client.database('images').getAttachment(req.params.id, filename);
// response is your HTTP response object
stream.on('data', function(chunk) {
    return response.write(chunk, "binary");
});
stream.on('end', function() {
    return response.end();
});
...