J'ai des données blob dans cette structure:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
Ce sont en fait des données sonores enregistrées à l'aide des récents Chrome getUerMedia()
et Recorder.js
Comment puis-je télécharger cet objet blob sur le serveur à l'aide de la méthode de publication de jquery? J'ai essayé ceci sans aucune chance:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
javascript
jquery
html
Yang
la source
la source
Réponses:
Essaye ça
Vous devez utiliser l' API FormData et définir le
jQuery.ajax
'sprocessData
etcontentType
surfalse
.la source
$('input[type=file]').value=blob
En fait, vous n'avez pas à utiliser
FormData
pour envoyer unBlob
au serveur à partir de JavaScript (et aFile
est également unBlob
).Exemple jQuery:
Exemple JavaScript vanille:
Certes, si vous remplacez un formulaire en plusieurs parties HTML traditionnel par une implémentation «AJAX» (c'est-à-dire que votre back-end consomme des données de formulaire en plusieurs parties), vous souhaitez utiliser l'
FormData
objet comme décrit dans une autre réponse.Source: Nouvelles astuces dans XMLHttpRequest2 | Roches HTML5
la source
Je n'ai pas pu faire fonctionner l'exemple ci-dessus avec des blobs et je voulais savoir ce qu'il y avait exactement dans upload.php. Alors voilà:
(testé uniquement dans Chrome 28.0.1500.95)
Le contenu de upload.php:
la source
data: fd,
dans l'ajax
appel de fonction àdata: blob,
.J'ai pu faire fonctionner l'exemple @yeeking en n'utilisant pas FormData mais en utilisant un objet javascript pour transférer le blob. Fonctionne avec un blob sonore créé à l'aide de recorder.js. Testé dans la version 32.0.1700.107 de Chrome
Contenu de upload.php
la source
Mise à jour 2019
Cela met à jour les réponses avec la dernière API Fetch et n'a pas besoin de jQuery.
Avertissement: ne fonctionne pas sur IE, Opera Mini et les anciens navigateurs. Voir caniuse .
Récupération de base
Cela pourrait être aussi simple que:
Récupérer avec gestion des erreurs
Après avoir ajouté la gestion des erreurs, cela pourrait ressembler à:
Code PHP
Il s'agit du code côté serveur dans upload.php.
la source
J'ai essayé toutes les solutions ci-dessus et en plus, celles des réponses connexes. Solutions incluant, mais sans s'y limiter, le passage manuel de l'objet blob à la propriété file d'un HTMLInputElement, l'appel de toutes les méthodes readAs * sur FileReader, l'utilisation d'une instance File comme deuxième argument pour un appel FormData.append, en essayant d'obtenir les données blob sous forme de chaîne en obtenant les valeurs de URL.createObjectURL (myBlob) qui se sont avérées désagréables et ont planté ma machine.
Maintenant, si vous essayez de les essayer ou plus et que vous ne parvenez toujours pas à télécharger votre blob, cela peut signifier que le problème est côté serveur. Dans mon cas, mon blob a dépassé la limite http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize et post_max_size dans PHP.INI, le fichier quittait donc le front-end forme mais rejetée par le serveur. Vous pouvez augmenter cette valeur directement dans PHP.INI ou via .htaccess
la source