Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2015, 21:19
Новичок на форуме
Отправить личное сообщение для Halyluya Посмотреть профиль Найти все сообщения от Halyluya
 
Регистрация: 24.08.2015
Сообщений: 4

XHR Post отправить доп инфу с основной
Доброго времени суток, требуется совет сообщества, как лучше поступить в данной ситуации.
Суть в чем, есть аплоадер картинок, который на КЛИЕНТЕ изменяет размер\качество фоток, на выходе я получаю новую фотку, кодированую в base64 ~150-200кб(вместо 4мб изначальных) простейшим XHR запросом отправляю на сервак, который сохраняет куда надо. Проблема в том, что помимо самой фотки, мне надо отправить и имя изначального файла, узнать его не проблема, но вот как отправить с фоткой - не могу решить.
Варианты какие вижу:
а) создать простейший обьект, два поля: имя и файл, JSON.stringify на клиенте и на сервере JSON.parse и вот оно счастье. Проблема в том, что кодировать\парсить json размером в 200кб - лишняя трата ресурсов.
б) создать FormData добавить к нему поля и тоже отправить, на серваке распарсить и т.д. Не нравится вариант также как и с JSON обьектом изза лишних затрат ресурсов.
в) ну и последний вариант, что мне приходит в голову, отправить его с url-ом типа
'/image/upload?file_name.jpeg'
Вроде как самый экономный в плане ресурсов, но мне не нравится
Вообщем как-то так, возможно еще есть варианты которые я упустил\не знаю ?
По сути вопрос сводится к тому, можно ли к XHR помимо основного тела прицепить доп инфу(и как её выдрать потом) если нельзя, то какой вариант лучше.
ЗЫ. на сервере NODEjs, если это имеет значение.
Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2015, 03:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Halyluya
на выходе я получаю новую фотку, кодированую в base64
Сообщение от Halyluya
создать FormData добавить к нему поля и тоже отправить, на серваке распарсить и т.д.
Чего парсить и зачем? Вы думаете FormData отправит как-то иначе изображение? Оно и будет передано base64. И почему передавая на сервер изображение в base64 (не важно чем), нельзя этим же post запросом передать и имя, а мудрить с get, json?
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2015, 16:11
Новичок на форуме
Отправить личное сообщение для Halyluya Посмотреть профиль Найти все сообщения от Halyluya
 
Регистрация: 24.08.2015
Сообщений: 4

Сообщение от laimas
Чего парсить и зачем? Вы думаете FormData отправит как-то иначе изображение? Оно и будет передано base64.
Замечательно, но сам FormData прийдет в виде Buffer-a который и прийдется парсить. Получается что я трачу ресурсы на его создание, потом на его парсинг, не вижу смысла в его использовании в таком случае.

Сообщение от laimas
И почему передавая на сервер изображение в base64 (не важно чем), нельзя этим же post запросом передать и имя
воооот! о чем и вопрос, а КАК его передать с минимальными затратами ресурсов ?
Дело в том, что я по факту новичок еще и получается что некоторые моменты языка знаю неплохо, а некоторые - плохо и крайне не хватает опыта.
Можно в тупую
'encoded_file' + 'file_name'
но это надо будет парсить его на сервере тоже, что опять же не хочется, 200КБ стринга есть 200кб.
Пока из экономных я вижу варианты или запихнуть его в url при реквесте или попробывать сделать свой кастомный заголовок и положить его туда, но не знаю можно ли такое вообще сделать, никогда не пробывал.
Просто для меня XMLHttpRequest это конструкция типа
var xhr = new XMLHttpRequest();
xhr.open('POST', '/image', true);
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); 
xhr.send(file);

создали экземпляр, указали метод, путь и асинхронность, по желанию заголовки и отослали. всё.
я почему и спрашиваю, возможно есть какой-то простой и примитивный способ, о котором я просто не знаю.
Вот как бы Вы отослали имя файла и файл, при условии максимальной экономии ресурсов ?
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2015, 17:11
Новичок на форуме
Отправить личное сообщение для Halyluya Посмотреть профиль Найти все сообщения от Halyluya
 
Регистрация: 24.08.2015
Сообщений: 4

Сообщение от Rise Посмотреть сообщение
Halyluya,
'file_name=filename&encoded_file=encodedfile'
простите, не понял (

если это предлагаете в единый стринг объединить и отослать - то, имха, не очч идея, его пускай и легко будет распарсить, но нагрузка на сервак таки ляжет. 200кб стринга, это не есть хорошо. Это если я правильно понял Вас.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2015, 17:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Rise
'file_name=filename&encoded_file=encodedfile'
А чего тут парсить то? Или Node.js сам не разбирает параметры запроса и не понимает методов их? Да если и самому известными методами JS, это разве трудоемкая операция.
Ответить с цитированием
  #6 (permalink)  
Старый 25.08.2015, 17:59
Новичок на форуме
Отправить личное сообщение для Halyluya Посмотреть профиль Найти все сообщения от Halyluya
 
Регистрация: 24.08.2015
Сообщений: 4

Сообщение от Rise
Halyluya, а что в NODEjs нет аналогов php $_POST['file_name'], $_POST['encoded_file']?
кажеться в Express-e было по-умолчанию, но я не использую.

Сообщение от laimas
А чего тут парсить то? Или Node.js сам не разбирает параметры запроса и не понимает методов их? Да если и самому известными методами JS, это разве трудоемкая операция.
сам не разбирает, "из коробки" данные зачастую или в Buffere приходят или в стринге, а там как хочешь. Я подрубал модуль парсинга и к слову, надо проверить, по идее должен ведь.
Спасибо, дали толчок мысли, попробую.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно отправить POST Svetik-top Angular.js 14 20.04.2015 08:45
Подгрузка доп скрипта в основной. AleksBa AJAX и COMET 0 17.08.2014 11:22
Нужна помощь с AJAX Sergio022 AJAX и COMET 13 09.08.2014 23:50
Отправить форму POST из JS. form.submit() отличается от нужного результата Owyn Общие вопросы Javascript 5 17.07.2013 19:59
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57