Я играю с API FormData
. Here - это скрипка, которую я использую - я пытаюсь ввести капли в мою форму и отправить через AJAX.Невозможно отправить полезную нагрузку blob в FormData
//ic0 and tc0 are canvases
//image0 and thumb0 are file inputs
function ajaxSubmit(){
var fd = new FormData(document.forms[0]);
ic0.toBlob(
function(blob){
fd.set("image0", blob, "image0.jpg");
}, "image/jpeg", 0.7);
tc0.toBlob(
function(blob){
fd.set("thumb0", blob, "thumb0.jpg");
}, "image/jpeg", 0.7);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/ajax-upload/", true);
xhr.send(fd);
}
поведение браузера немного ... странным:
Chrome 50 (в Ubuntu)
не в состоянии сделать это, дает:
Failed blob:https%3A//fiddle.jshell.net/uuid4 to load resource: the server responded with 404
Но я думал FormData.set()
была поддержана сейчас? Кажется, он работает с non-blobs?
Firefox 46 (в Ubuntu)
Не кажется ли работа FormData()
объекта не инициализируются с объектом DOM, который уже имеет необходимые файловые входы (прилагаемые нормальные входы размещены однако). FormData.set()
, похоже, не работает с файловыми входами и блоками (вы заметите, что thumb0
является нулевым значением в полезной нагрузке, несмотря на то, что он называет fd.set("thumb0", blob, "thumb0.jpg")
. Вы можете проверить, что он установлен, выполнив console.log(fd.get("thumb0"))
сразу после настройки. Вы также заметите, что полезная нагрузка .. из image0
некорректно исходное изображение, а не изменять размер холста изображения
это неудобно, не будучи в состоянии настроить ваш многочастному FormData
с JavaScript Я Javascript нуб - я просто делаю что-то совершенно неправильно здесь, или эти браузеры не поддерживают API FormData
? Как я могу отправить image0
и thumb0
правильно в моей скрипке?
Редактировать: Хорошо, собираюсь наполнить это. Я знаю, что есть большие jquery-зависимые библиотеки, такие как blueimp, и я думаю, что они base64 данные, а не передают как входные данные (плюс я хочу избежать jquery). Я только должен поддерживать последние Chrome или Firefox для этого проекта, и я действительно надеюсь, что смогу сохранить код таким же чистым, как API FormData
, кажется, что я могу это сделать. Может ли кто-нибудь успешно захватить изображение с холста и вставить его в полезную нагрузку POST в виде файла? Я хочу, чтобы иметь доступ к этому в request.FILES
в django.
Я мог бы быть неправильно, но не отправлять файлы объекта на сервер вместо сгустка? fd.set ('image', e.target.files [0] ') для одного файла? Также убедитесь, что форма multipart –
Глядя на запрос '' Заголовки запросов' и 'Request Payload', изображения, кажется, отправляются просто отлично. И сервер, похоже, возвращает '404', а не' 400' или что-то еще. – C14L
Не должны ли вы убедиться, что он отправляется на ваш фактический сервер? Сейчас он отправляется в домен jsfiddle. – aross