Ich habe Blob-Daten in dieser Struktur:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
Es handelt sich tatsächlich um Audiodaten, die mit den neuesten Versionen von Chrome getUerMedia()
und Recorder.js aufgezeichnet wurden
Wie kann ich diesen Blob mit der Post-Methode von jquery auf den Server hochladen? Ich habe das ohne Glück versucht:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
javascript
jquery
html
Yang
quelle
quelle
Antworten:
Versuche dies
Sie müssen die verwenden Formdata API und stellen Sie die
jQuery.ajax
‚sprocessData
undcontentType
zufalse
.quelle
$('input[type=file]').value=blob
Sie müssen eigentlich nicht verwenden
FormData
, um aBlob
von JavaScript an den Server zu senden (und aFile
ist auch aBlob
).jQuery-Beispiel:
Vanilla JavaScript Beispiel:
Zugegeben, wenn Sie ein herkömmliches mehrteiliges HTML-Formular durch eine "AJAX" -Implementierung ersetzen (dh Ihr Back-End verwendet mehrteilige Formulardaten), möchten Sie das
FormData
Objekt wie in einer anderen Antwort beschrieben verwenden.Quelle: Neue Tricks in XMLHttpRequest2 | HTML5 Rocks
quelle
Ich konnte das obige Beispiel nicht dazu bringen, mit Blobs zu arbeiten, und ich wollte wissen, was genau in upload.php enthalten ist. Also los geht's:
(nur in Chrome 28.0.1500.95 getestet)
Der Inhalt von upload.php:
quelle
data: fd,
imajax
Funktionsaufruf in ändern könnendata: blob,
.Ich konnte das Beispiel @yeeking zum Laufen bringen, indem ich nicht FormData, sondern ein Javascript-Objekt zum Übertragen des Blobs verwendete. Funktioniert mit einem Sound-Blob, der mit recorder.js erstellt wurde. Getestet in Chrome Version 32.0.1700.107
Inhalt von upload.php
quelle
Update 2019
Dadurch werden die Antworten mit der neuesten Fetch-API aktualisiert und jQuery wird nicht benötigt.
Haftungsausschluss: Funktioniert nicht mit IE, Opera Mini und älteren Browsern. Siehe caniuse .
Grundlegender Abruf
Es könnte so einfach sein wie:
Abrufen mit Fehlerbehandlung
Nach dem Hinzufügen der Fehlerbehandlung könnte dies folgendermaßen aussehen:
PHP-Code
Dies ist der serverseitige Code in upload.php.
quelle
Ich habe alle oben genannten Lösungen ausprobiert und zusätzlich auch die in verwandten Antworten. Lösungen, einschließlich, aber nicht beschränkt auf das manuelle Übergeben des Blobs an die Dateieigenschaft eines HTMLInputElement, das Aufrufen aller readAs * -Methoden in FileReader, das Verwenden einer File-Instanz als zweites Argument für einen FormData.append-Aufruf und das Abrufen der Blob-Daten als Zeichenfolge durch Abrufen die Werte bei URL.createObjectURL (myBlob), die sich als böse herausstellten und meinen Computer zum Absturz brachten.
Wenn Sie diese oder mehrere versuchen und dennoch feststellen, dass Sie Ihren Blob nicht hochladen können, kann dies bedeuten, dass das Problem serverseitig ist. In meinem Fall hat mein Blob das Limit http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize und post_max_size in PHP.INI überschritten, sodass die Datei das Frontend verlassen hat Formular, wird aber vom Server abgelehnt. Sie können diesen Wert entweder direkt in PHP.INI oder über .htaccess erhöhen
quelle