Node.js piping http.ClientRequest into fs.createWriteStream with Binary Files leads to corrupted/bloated files

У меня странная проблема с модулем Node.js (v0.4.12), над которым я работаю. Это модуль CouchDB, и хотя я уверен, что проблема не в CouchDB, я включу это, так как это может быть полезной информацией.

Короче, я пишу обертку для загрузки и выгрузки вложений с помощью CouchDB. Часть загрузки работает очень хорошо, а вот с частью загрузки у меня возникли трудности.

Мой тестовый процесс выглядит так:

  1. Загрузка файла изображения (http.request, fs.createReadStream)
  2. Загрузка файла (http.request)
  3. Сохранение загруженного файла в другое место для сравнения/проверки повреждений (fs. createWriteStream, stream.pipe)

Это отлично работает с обычными текстовыми файлами, но бинарные файлы, такие как изображения, ведут себя иначе.

Как я уже говорил, загрузка проходит нормально. Я могу перейти по URL в CouchDB и просмотреть изображение. Когда я использую свой модуль для загрузки файла и его сохранения, выходной файл больше исходного (на 50-100%) и не может быть открыт ни одним редактором изображений. (следовательно, он каким-то образом "поврежден")

Я что-то упустил в Streams, когда речь идет о бинарных файлах? Я пробовал менять кодировку с обеих сторон на "binary" и "base64", но выходной файл все равно на 50% больше исходного. До того, как я обнаружил опцию кодировки, она была установлена на "utf8", и выходной файл был на 100% больше, так что это наводит меня на мысль, что где-то здесь проблема с кодировкой.

Я также попробовал вручную соединить потоки (а не использовать сам метод pipe), но результат тот же.

6
задан Dominic Barnes 4 October 2011 в 21:56
поделиться