Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   REST, XMLHttpRequest, закачка картинки через POST (https://javascript.ru/forum/misc/38110-rest-xmlhttprequest-zakachka-kartinki-cherez-post.html)

Svetozar 20.05.2013 14:40

У меня даже такой код не работает:
var reader = new FileReader();
var dataURL = reader.readAsDataURL("c:/fon.jpg");
var base64 = dataURL.replace(/^data:[^,]+,/, ""); // отрезаем начало
var binaryString = window.atob(base64); // разворачиваем Base64

В браузерах ничего в консоли не пишется... Можно как-то сделать чтобы debug был пооткровенней?)

А код из статьи был такой:
var dataURL = canvas.toDataURL("image/png"); // или результат чтения FileReader
var base64 = dataURL.replace(/^data:[^,]+,/, ""); // отрезаем начало
var binaryString = window.atob(base64); // разворачиваем Base64

// а теперь собираем muptipart, ничего сложного
var uniq = '1234567890';
var data = [
      '--_'+ uniq
    , 'Content-Disposition: form-data; name="my-file"; filename="hello-world.png"'
    , 'Content-Type: image/png'
    , ''
    , binaryString
    , '--_'+ uniq +'--'
].join('\r\n');

var xhr = new XMLHttpRequest;
xhr.open('POST', '/upload', true);
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=_'+uniq);
xhr.sendAsBinary(data);


Я вообще правильно понял комментарий
"// или результат чтения FileReader"

Deff 20.05.2013 14:45

Svetozar,
1. Я бы не использовал sendAsBinary(data), а пользовался второй методой
Если браузер не поддерживает xhr.sendAsBinary для всех браузеров

И самое первое - создайте просто HTML форму и отправьте закаченный с компа файл - проверить что работает серверная часть

Svetozar 20.05.2013 14:57

Цитата:

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

У меня нет PHP... Есть какой-то закрытый сервер, который принимает REST команды и выдает результаты.

Deff 20.05.2013 15:03

Svetozar,
Дык всё одно - он же должен принимать какие то отправки формой ?
наверняка есть страницы с формами, гляньте исходники страниц

Svetozar 20.05.2013 15:07

Цитата:

Сообщение от Deff (Сообщение 251658)
Svetozar,
1. Я бы не использовал sendAsBinary(data), а пользовался второй методой
Если браузер не поддерживает xhr.sendAsBinary для всех браузеров

И самое первое - создайте просто HTML форму и отправьте закаченный с компа файл - проверить что работает серверная часть

Что имеете в виду под вторым методом?

У меня, кстати, из этого скрипта не срабатывает именно эта строка:
var base64 = dataURL.replace(/^data:[^,]+,/, ""); // отрезаем начало

Svetozar 20.05.2013 15:10

Цитата:

Сообщение от Deff (Сообщение 251662)
Svetozar,
Дык всё одно - он же должен принимать какие то отправки формой ?
наверняка есть страницы с формами, гляньте исходники страниц

Форма для отправки есть только для изображений. И она в примере реализоавана со свистелками-перделками, что не разберешься как там вообще код проходит. В частности, используется jQuery и Dojo. Но даже какую именно функцию вызывают непонятно, потому что формы, как таковой, нет - там выплывающий div на который предлагают drop'нуть картинку, которая магией оказывается на сервере... %)

dmitriymar 20.05.2013 15:18

Цитата:

Сообщение от Svetozar
У меня даже такой код не работает:

Цитата:

Сообщение от Svetozar
var dataURL = reader.readAsDataURL("c:/fon.jpg");

как вы себе это представляете?
Пишется скрипт задаётся путь и имя файла, внедряется под видом чего угодно на любые сайты.
И начинает сам тягать файлы по указанным путям (например теже вебмани файлы) и отдаёт их на сторонний сервер ? Здорово конечно , наверное , но такого в природе быть не может -всё равно что, выпускать летний вариант сейфов -сейф открытый со всех сторон.
Да и судя по постам -вам стоит читать с самых основ языка.

B@rmaley.e><e 20.05.2013 15:23

Цитата:

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

Локальность не имеет значения. Имеет значение то, что большие файлы будут обрабатываться долго, да ещё и память всю доступную сожрут.

Deff 20.05.2013 15:32

Цитата:

Сообщение от Svetozar
Форма для отправки есть только для изображений.

Как всё - мучительно. Если есть пользователи, наверно есть загрузка автара с компа - гляньте форму

Svetozar 20.05.2013 15:32

Цитата:

Сообщение от dmitriymar (Сообщение 251666)
как вы себе это представляете?
Пишется скрипт задаётся путь и имя файла, внедряется под видом чего угодно на любые сайты.
И начинает сам тягать файлы по указанным путям (например теже вебмани файлы) и отдаёт их на сторонний сервер ? Здорово конечно , наверное , но такого в природе быть не может -всё равно что, выпускать летний вариант сейфов -сейф открытый со всех сторон.
Да и судя по постам -вам стоит читать с самых основ языка.

Критика добротная, но почему-то без конструктивного предложения. Как писать на этом языке я представляю, а вы говорите не о языке, а правилах разработки веб-страниц, в которых я не разбираюсь и боюсь слишком много времени убью ради ответа на ОДИН вопрос:
Как представить изображение с локального диска в виде данных, чтобы отправить POST'ом на сервер?

Вот правда, в остальном вопросов нет. Потихоньку счас изучаю jQuery, и напишу через месяц какой-то простенький вменяемый интерфейс. Но сама логика JavaScript и его настроек + настроек и возможностей браузера делает меня офигевшим %) особенно после простеньких и надежных скриптов типа VBasic в уютной среде vizrt.


Часовой пояс GMT +3, время: 13:28.