Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2013, 20:43
Интересующийся
Отправить личное сообщение для Svetozar Посмотреть профиль Найти все сообщения от Svetozar
 
Регистрация: 17.05.2013
Сообщений: 10

REST, XMLHttpRequest, закачка картинки через POST
Вопрос про XMLHttpRequest — надо через web-страничку, т.е. силами JS, закачать фотографию на рабочий REST-сервис. Код сейчас выглядит так:
var xmlhttp = new getXmlHttp();
xmlhttp.open('POST', 'http://localhost/folders/root/', false, "Admin", "pass");
xmlhttp.setRequestHeader("Content-Type", "image/jpeg");
xmlhttp.setRequestHeader("Slug", "ThisIsNewImage");
data = ??? //"c:/image.jpg"
xmlhttp.send(data);

Не понимаю как представить изображение в виде данных, чтобы отправить POST'ом? В сети информацию на эту тему не ищется
Подскажите, пожалуйста, в какую сторону смотреть и что читать?
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2013, 21:01
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Смотреть в сторону FileAPI, XHR2

Читать спецификации, можно ещё это:
http://javascript.ru/blog/Brmaley-ee/FileAPI — статья тысячелетней давности, всё давно поменялось, но общее представление даёт. А ещё в конце имеются какие-то ссылки.
http://javascript.ru/blog/Jason-Bour...mi-cherez-AJAX

Без FileAPI Вы даже содержимое файла получить не сможете, так что и отправлять будет нечего. С помощью XHR2 можно их послать multipart запросом, т.е. так, будто он был отправлен из формы. Простым XHR'ом так не получится, придётся писать отдельную логику обработки AJAX загрузки.


Но проще всего файл средствами JS загружать через скрытые фреймы.
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2013, 21:04
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Svetozar
В сети информацию на эту тему не ищется
правда?
сначала зайдите сюда

а потом сюда http://learn.javascript.ru/xhr-forms
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 20.05.2013, 01:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от B@rmaley.e><e
статья тысячелетней давности, всё давно поменялось
обновить нет желания?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 20.05.2013, 02:39
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Загрузить данные можно таким хаком:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png', true);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.onreadystatechange = function(e) {
if (this.readyState == 4 && this.status == 200) {
var binaryString = this.responseText;
alert(binaryString.length);
}}; xhr.send();

Для отправки нун преобразовать в двоичный блоб и отправка вручную собранным muptipart

Может помочь статья:http://habrahabr.ru/company/mailru/blog/159587/
Читать стоит отсель "// а теперь собираем muptipart, ничего сложного"

Последний раз редактировалось Deff, 20.05.2013 в 02:41.
Ответить с цитированием
  #6 (permalink)  
Старый 20.05.2013, 03:46
Аспирант
Посмотреть профиль Найти все сообщения от quirksmode
 
Регистрация: 17.05.2013
Сообщений: 72

методом пут отправляй
Ответить с цитированием
  #7 (permalink)  
Старый 20.05.2013, 07:24
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от nerv_
обновить нет желания?
Было бы неплохо, но это надо перечитать спеки, посмотреть на браузерную поддержку (читай — проверь во всех браузерах), а у меня на это нет времени. Может быть, как-нибудь потом.

Сообщение от Deff
Для отправки нун преобразовать в двоичный блоб и отправка вручную собранным muptipart
Лучше пользоваться FormData. Для того, чтобы отправить само тело файла, нужно его сначала прочитать, а он может быть большой. С другой стороны, multipart разрешает отправку запроса "кусками", чем и должен пользоваться FormData.
Ответить с цитированием
  #8 (permalink)  
Старый 20.05.2013, 14:07
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

B@rmaley.e><e,
Ну пишем обычно про то, чем занимались, - таскал картинки иконок из гугла, по поисковым запросам
Ответить с цитированием
  #9 (permalink)  
Старый 20.05.2013, 14:26
Интересующийся
Отправить личное сообщение для Svetozar Посмотреть профиль Найти все сообщения от Svetozar
 
Регистрация: 17.05.2013
Сообщений: 10

Спасибо за ответы!
Буду читать и пробовать. Поймите еще меня правильно - я пользовался поисковиками, но как правильно задать поисковый запрос знают только опытные програмеры, а я лишь должен сейчас написать один функционал - я не сижу в JS днями-ночи
Все статьи пишут рецепты, а мне явно каких-то базовых знаний не хватает. Еще, моя задача не типичная для массы сайтов: на работе есть REST-веб-сервис, он как-то там работает - это закрытый код. Но через curl-консоль все проверяется, 100% рабочее.

Вот что у них в документации написано:
Код:
POST:
To create an image with specified compression level the client can add 
the uri parameter compression when posting to the folder collection uri.
A curl example of POST of an image with specified compression level 
DXT1 in the specified folder(uuid):

curl --request POST ttp://127.0.0.1/folder/49ad30fb-036a-47c7-b098-cf8472ad24eb/?compression=DXT1&name=current_file_name --data-binary @image.jpeg --header "Content-Type: image/jpeg"
поэтому, я подумал, что хедеры должны быть определенные:
xmlhttp.setRequestHeader("Content-Type", "image/jpeg");
xmlhttp.setRequestHeader("Slug", "ThisIsNewImage");


Мне неважно загружать частями или полностью. Сервера полностью локальные - можно целиком и пачками.

Я не уверен, можно ли через FormData отослать чистый файл с только требуемыми заголовками?
Ответить с цитированием
  #10 (permalink)  
Старый 20.05.2013, 14:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Svetozar,
ну FormData формирует такой же запрос как и реальная форма...
Если Ваш PHP сможет обрабатывать запрос от реальной тестовой формы, значит и от FormData аналогично
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать размер картинки через форму file Sergey67 Общие вопросы Javascript 1 24.12.2011 06:37
Браузер не успевает определить высоту вновь созданного через XMLHttpRequest элемента Lockpickup AJAX и COMET 17 25.04.2011 17:58
Изменение размеров картинки через скрипт SLV Общие вопросы Javascript 4 27.12.2010 11:40
Как обновить страницу открытую через post Роберт Общие вопросы Javascript 1 05.11.2008 14:53
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44