Tengo un blob de datos en esta estructura:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
En realidad, son datos de sonido grabados utilizando Chrome getUerMedia()
y Recorder.js recientes.
¿Cómo puedo cargar este blob en el servidor usando el método de publicación de jquery? Intenté esto sin suerte:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
javascript
jquery
html
Yang
fuente
fuente
Respuestas:
Prueba esto
Es necesario utilizar la API FormData y establecer el
jQuery.ajax
'sprocessData
ycontentType
afalse
.fuente
$('input[type=file]').value=blob
En realidad, no tiene que usar
FormData
para enviar unBlob
al servidor desde JavaScript (y aFile
también es aBlob
).Ejemplo de jQuery:
Ejemplo de JavaScript de vainilla:
Por supuesto, si está reemplazando un formulario de varias partes HTML tradicional con una implementación "AJAX" (es decir, su back-end consume datos de formulario de varias partes), desea usar el
FormData
objeto como se describe en otra respuesta.Fuente: Nuevos trucos en XMLHttpRequest2 | HTML5 Rocks
fuente
No pude hacer que el ejemplo anterior funcionara con blobs y quería saber qué hay exactamente en upload.php. Así que aquí tienes:
(probado solo en Chrome 28.0.1500.95)
El contenido de upload.php:
fuente
data: fd,
en laajax
llamada de función adata: blob,
.Pude hacer que el ejemplo de @yeeking funcionara sin usar FormData sino con el objeto javascript para transferir el blob. Funciona con un blob de sonido creado con recorder.js. Probado en Chrome versión 32.0.1700.107
Contenido de upload.php
fuente
Actualización 2019
Esto actualiza las respuestas con la última Fetch API y no necesita jQuery.
Descargo de responsabilidad: no funciona en IE, Opera Mini y navegadores más antiguos. Ver caniuse .
Búsqueda básica
Podría ser tan simple como:
Obtener con manejo de errores
Después de agregar el manejo de errores, podría verse así:
Código PHP
Este es el código del lado del servidor en upload.php.
fuente
Probé todas las soluciones anteriores y, además, las de las respuestas relacionadas. Soluciones que incluyen, entre otras, pasar el blob manualmente a la propiedad de archivo de HTMLInputElement, llamar a todos los métodos readAs * en FileReader, usar una instancia de archivo como segundo argumento para una llamada FormData.append, intentar obtener los datos del blob como una cadena obteniendo los valores en URL.createObjectURL (myBlob) que resultaron desagradables y bloquearon mi máquina.
Ahora, si intenta esos o más y aún descubre que no puede cargar su blob, podría significar que el problema está en el lado del servidor. En mi caso, mi blob superó el límite de http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize y post_max_size en PHP.INI, por lo que el archivo estaba saliendo de la interfaz formulario pero siendo rechazado por el servidor. Puede aumentar este valor directamente en PHP.INI o mediante .htaccess
fuente