У меня есть данные blob в этой структуре:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
На самом деле это звуковые данные, записанные с использованием последних версий Chrome getUerMedia()
и Recorder.js.
Как я могу загрузить этот большой двоичный объект на сервер с помощью метода отправки jquery? Я пробовал это безуспешно:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
Ответы:
Попробуй это
Вы должны использовать API FormData и установить
jQuery.ajax
«sprocessData
иcontentType
кfalse
.источник
$('input[type=file]').value=blob
На самом деле вам не нужно использовать
FormData
для отправкиBlob
на сервер из JavaScript (аFile
также aBlob
).Пример jQuery:
Пример ванильного JavaScript:
Конечно, если вы заменяете традиционную составную форму HTML на реализацию «AJAX» (то есть ваша внутренняя часть потребляет данные составной формы), вы хотите использовать
FormData
объект, как описано в другом ответе.Источник: Новые приемы в XMLHttpRequest2 | HTML5 Rocks
источник
Мне не удалось заставить приведенный выше пример работать с большими двоичными объектами, и я хотел знать, что именно находится в upload.php. Итак, вы идете:
(проверено только в Chrome 28.0.1500.95)
Содержимое upload.php:
источник
data: fd,
вajax
вызове функции наdata: blob,
.Мне удалось заставить пример @yeeking работать, не используя FormData, но используя объект javascript для передачи blob. Работает со звуковой каплей, созданной с помощью рекордера.js. Проверено в Chrome версии 32.0.1700.107
Содержимое upload.php
источник
Обновление 2019
Это обновляет ответы с помощью последней версии Fetch API и не требует jQuery.
Отказ от ответственности: не работает в IE, Opera Mini и более старых браузерах. См. Caniuse .
Базовая загрузка
Это может быть очень просто:
Получение с обработкой ошибок
После добавления обработки ошибок это могло бы выглядеть так:
Код PHP
Это серверный код в upload.php.
источник
Я пробовал все решения выше, а также те, что в связанных ответах. Решения, включая, помимо прочего, передачу большого двоичного объекта в свойство файла HTMLInputElement, вызов всех методов readAs * в FileReader с использованием экземпляра File в качестве второго аргумента для вызова FormData.append, попытка получить данные большого двоичного объекта в виде строки путем получения значения в URL.createObjectURL (myBlob), которые оказались неприятными и разбили мою машину.
Теперь, если вы попытаетесь выполнить те или другие действия и по-прежнему обнаружите, что не можете загрузить свой большой двоичный объект, это может означать, что проблема на стороне сервера. В моем случае мой BLOB- объект превысил http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize и ограничение post_max_size в PHP.INI, поэтому файл покидал внешний интерфейс форма, но отклоняется сервером. Вы можете либо увеличить это значение непосредственно в PHP.INI, либо через .htaccess.
источник