Имитация отправки формы файла с XMLHttpRequest Уровень 2 - PullRequest
2 голосов
/ 01 апреля 2012

На моей текущей странице я использую старый файл загрузки с элементом ввода.Однако теперь я реализовал перетаскивание из этой очень хорошей серии статей: http://www.sitepoint.com/html5-file-drag-and-drop/

Есть одна загвоздка.Прежде чем переписать страницу, я отправлял форму с файловой и серверной службами (appspot.com на Java), выполняя всю магию по извлечению файла, сохранению в БД и т. Д. Я все же хотел бы воспользоваться этой услугой.Однако теперь, после перезаписи загрузки файла для использования XMLHttpRequest, мой код просто записывает файл в контент, тогда как сервис ожидает форму.

Есть ли способ имитировать отправку формы miltipart / form-data с помощью XMLHttpRequest?

1 Ответ

2 голосов
/ 01 апреля 2012

Объект FormData может использоваться для отправки multipart/form-data форм.

Базовый пример:

var fd = new FormData(); // Optionally: new FormData(htmlFormElement);
fd.append('key', 'value');
fd.append('file', reference_to_File_object);
                  //  ^ Example: .files property of an <input type="file"

var xhr = new XMLHttpRequest();
xhr.open('post', '/postdata', true);
xhr.send(fd);

Когда строки передаются в .send() метод экземпляра XMLHttpRequest, преобразуется в Unicode, затем кодируется как UTF-8.Это означает, что пользовательская реализация multipart/form-data, использующая строки, часто не будет работать правильно.

...