[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файла через XMLHttpRequest
qweasd
Я сегодня почти делый день потратил, что бы разобраться, как на чистом javascript отправить файл на сервер через ajax (XMLHttpRequest).

Извращенный решений нашел много. Самые нормальные, как показалось мне - это использование скрытых iframe'ов

И только что натолкнулся на форуме, на вот такой пример отправки данных.

<script type="text/javascript">

...


/* тут описание переменных */

...

if(document.all) xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

else if(XMLHttpRequest) xmlhttp = new XMLHttpRequest();

else alert("XMLHttpRequest не работает!");



if(xmlhttp){

xmlhttp.open("POST", "example_upload.php", false);

xmlhttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=1BEF0A57BE110FD467A");

xmlhttp.setRequestHeader("Content-Length", "2000");

formData = "--1BEF0A57BE110FD467A\r\nContent-Disposition: form-data; name='mark'\r\n\r\n'" + markForm.value + "'\r\n --1BEF0A57BE110FD467A\r\nContent-Disposition: form-data; name='uploadfile'; filename='"+file.value+"'\r\nContent-Type: application/octet-stream\r\n\r\n" + <????????> + "\r\n--1BEF0A57BE110FD467A--\r\n";

</
script>



<
form name="uploadForm" method="post" enctype="multipart/form-data">

<
input name="mark" type="text" />

<
input type="file" name="uploadfile" />

<
input name="Button" type="button" value="Upload File" onclick="sendHttp();"/>









Итак это кусок кода, отвечающего за формирование и отправку POST запроса посредством JS и XMLHttpRequest.



Что надо?

Насколько всем известно GET-запрос отправит данные в виде:

http://.../example_upload.php?file=<путь к файлу в URL кодировке>&mark=<значение поля mark>&button=Upload%20File



POST-запрос выглядит координально по другому:

--
1BEF0A57BE110FD467A

<переход строки>

Content-Disposition: form-data; name='mark'

<переход строки>

<
переход строки>

<
значение поля mark>

<
переход строки>

--
1BEF0A57BE110FD467A

<переход строки>

Content-Disposition: form-data; name='uploadfile'; filename='путь к файлу в URL кодировке>'

<переход строки>

Content-Type: application/octet-stream

<переход строки>

<
переход строки>



<
ВНИМАНИЕ! ТУТ ДОЛЖЕН БЫТЬ ФАЙЛ В БИНАРНОМ ВИДЕ, а не просто путь к этому файлу>



<
переход строки> --1BEF0A57BE110FD467A--

<
переход строки>


то вообще работает? кто может объснить?


а работоспособность не проверял...

Может пожалуйста кто то объяснить, что это мы в заголовке указываем:
("Content-Type", "multipart/form-data; boundary=1BEF0A57BE110FD467A");

Можно ли таким образом файлы передавать на ajax'e ?



И вот еще вопросик:


Вот нашел статью, где показан пример загрузки файла на сервер через ajax (XMLHttpRequest)

learn.javascript.ru/xhr-resume

Скажите пожалуйста, это нормально решение?

А то весь гугл облазил, и везде пишут что это невозможно. Только через iframe или другие извращения.

Что же используется в примере из статьи?


Помогите пожалуйста...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.