Как правильно загрузить и сохранить фотографию с помощью Node.JS (без фреймворков) - PullRequest
0 голосов
/ 24 июня 2018

Я добавляю функцию загрузки фотографий в свой чат. У меня есть 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: теперь я думаю, что кириллица просто теряется при отправке данных. В консоли и браузере они выглядят как неизвестный символ (обведенный прямоугольником).

1 Ответ

0 голосов
/ 02 июля 2018

Анализатор тела, вероятно, неверен.Безопасная обработка multipart/form POST-данных может быть довольно сложной задачей.

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

О первых байтах их иногда называют «магическими байтами», подробнее о них здесь: https://en.wikipedia.org/wiki/List_of_file_signatures

Эти байты используются большинством операционных систем для определения типа файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...