Я добавляю функцию загрузки фотографий в свой чат. У меня есть POST-анализатор от этого ответа и небольшой код, который сохраняет изображение в каталог для загрузки.
var ext = exports.getFileExt(Object.keys(partsByName)[0]);
var time = (new Date()).getTime();
fs.writeFile("./img/user/upload_" + time + "." + ext,
partsByName[Object.keys(partsByName)[0]], "binary", function (err) {
if (!err) {
res.writeHead(200, "OK", { "Content-Type": "text/html" });
res.write(exports.wrapHTML(<title>, <html>, <font params>));
res.end();
} else {
console.error(err);
res.writeHead(500, "Internal Server Error");
res.end();
}
});
Изображение сохраняется с ожидаемым именем, но не открывается, и я думаю, что неправильная кодировка.
Исходный файл запуска выглядит так:
яШяа JFIF H H яб"Exif MM *
но новый сохраненный файл отличается:
ээээ JFIF H H ээ"Exif MM *
Я пытался написать свой собственный синтаксический анализатор, прежде чем нашел этот ответ, и у него была другая структура - он извлекал границу с помощью /boundary=(.+)/
regex, затем получал расширение файла из проанализированного имени файла и вырезал 2 первые строки с массивом, затем соединялся с «\ r \ n» и применение substr(boundary.length, data.length - (boundary.length * 2))
(и некоторые другие исправления), сохранение с fs.writeFile
и файл снова выглядят неправильно.
UPD: теперь я думаю, что кириллица просто теряется при отправке данных. В консоли и браузере они выглядят как неизвестный символ (обведенный прямоугольником).