сохрание изображений без использования middleware
Здравствуйте.
Я хочу сохранить на диск картинки, приходящие POST запросом, без использования middleware like multer, busboy и тд. Хочу разобраться в каком формате приходят каринки на сервер, и как их распарсивать прежде чем сохранять на диск. На странице есть форма, которая отправляет текстовые поля. Сами изображения я отправляю по одной при клике на Upload. Для отправки изображения формирую POST запрос, в теле которого я и передаю изображение. form(method='POST' action='/building/add' enctype='multipart/form-data') var uploaded_data = new FormData(); uploaded_data.append("foto", btn_uploadPreviews[0].files[img_index]); // где btn_uploadPreviews = $(input[type="file"]) // и btn_uploadPreviews[0].files - массив загруженных файлов через проводник // btn_uploadPreviews[0].files[img_index] - берём конкретное изображение по индексу $.ajax({ type: 'POST', url: '/building/add', data: uploaded_data, processData: false, contentType: false, success: function(data){ console.log(data); }, error: function(){ console.log('error'); } }); На серваке, проблема состоит в том, что картинка приходит в виде бинарных данных, среди которых есть такие данные как ------WebKitFormBoundaryAv4xbzebt3AYoGsv И если вывести в консоль кусок данных через chunk.toString(), то картинка выводится как символы + метаданные ------WebKitFormBoundaryAv4xbzebt3AYoGsv, Content-Type и тд. subapp.post('/building/add', function(req, res){ var newImage = fs.createWriteStream('uploads/newImage.jpg'); console.log(req.headers); var data = ' '; req.on('data', function(chunk){ data += chunk; console.log(chunk.toString()); }); req.on('end', function(){ res.send(data); }); }); https://drive.google.com/file/d/0B7r...ew?usp=sharing https://drive.google.com/file/d/0B7r...ew?usp=sharing Как можно удалить эти метаданные перед сохранением картинки? И в каком формате должна находится картинка чтоб удалять эти метаданные. Нужно ли кусок считываемых данных хранить в переменной Buffer или просто в строковой переменной? Заранее огромное спасибо. |
svg121,
Отправляй файл, а не ФормДату. Тогда картинка придёт как есть и ты сможешь запросто её сохранить методом pipe https://nodejs.org/dist/latest-v8.x/...tion_optio ns , и это будет круто, максимально эффективно, без говнокода и вспомогательных библиотек. А так приходит формдата, в которой есть разделители и прочее (см. multipart/form-data), её парсить надо. Эта штука нужна, если отправляешь доп. данные, или несколько файлов. Для отправки одного файла нафиг не надо. |
Alexandroppolus, спасибо большое за совет, сохраняет.
А имя изображения (или путь) я передаю через формирование кастомного заголовка для Post-a. На будущее буду пытаться распарсивать мульпарт для сохранения нескольких изображений. |
svg121,
Есть готовые библиотеки парсинга мультипарта, задача-то типовая. И конечно, это более ресурсоемкая операция для ноды. Даже если надо сохранить несколько файлов, то лучше отдельными запросами каждый файл, чем одной формдатой. |
Часовой пояс GMT +3, время: 02:11. |