2016-07-07 6 views
0

я использую fs.writeFileSync(file, data[, options]), чтобы сохранить файл вернулись из http.get(options[, callback])Узел writeFileSync параметров кодирования для изображений

Это хорошо работает для текстовых файлов, но изображений, PDF-файлы и т.д. в конечном итоге испорчен. Из поиска вокруг того, что я сделал, это, по-видимому, потому, что fs.writeFileSync(file, data[, options]) по умолчанию соответствует UTF-8

Я попытался установить кодировку в «двоичный», тип MIME и расширение безрезультатно. Мне кажется, что что-то действительно очевидно, что я не замечаю, может ли кто-нибудь указать мне в правильном направлении?

Спасибо заранее

Update

Я бегу это через электрон. Я не думал, что стоит упомянуть, что электрон просто работает, но я не специалист по узлам или электронам, поэтому я не уверен

ответ

1

Создайте буфер из данных изображения и установите его кодировку на binary. Затем передайте эти данные в stream.PassThrough и трубку, которая находится в stream.Writable.

var fs = require('fs'); 
var stream = require('stream'); 

var imgStream = new stream.PassThrough(); 
imgStream.end(Buffer.from(data, 'binary')); 

var wStream = fs.createWriteStream('./<dest>.<ext>'); 

imgStream.once('end',() => { 
    console.log('Image Written'); 
}); 

imgStream.once('error', (err) => { 
    console.log(err); 
}); 

imgStream.pipe(wStream); 
+0

Hi @peteb. Спасибо за ваш ответ. Я попробовал ваше предложение, и каждый файл запустил ошибку «Неизвестная кодировка:% pdf-1.4» в случае файлов PDF. Файлы изображений не отображали никаких ошибок, но изображения все еще были повреждены и, следовательно, нечитаемы. Я обновил свой вопрос, включив в него тот факт, что я запускаю это через электрон, хотя я не уверен, насколько это актуально. – Ryuu

+0

Решение заключалось в том, чтобы установить кодировку запроса в «двоичную», однако, как вы полагаете, это также требует, чтобы кодировка буфера была также установлена ​​в «двоичный». Я пытаюсь использовать оба метода за последние 2 дня, но никогда не вместе (почему это выходит за рамки меня). Но, похоже, это решило мою проблему, поэтому я буду отмечать вас правильно, так как содержит часть решения. Спасибо за вашу помощь – Ryuu

 Смежные вопросы

  • Нет связанных вопросов^_^