Saya memiliki data blob dalam struktur ini:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
Ini sebenarnya data suara yang direkam menggunakan Chrome getUerMedia()
dan Recorder.js terbaru
Bagaimana cara mengunggah blob ini ke server menggunakan metode posting jquery? Saya sudah mencoba ini tanpa hasil:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
javascript
jquery
html
Yang
sumber
sumber
Jawaban:
Coba ini
Anda perlu menggunakan API FormData dan mengatur
jQuery.ajax
'sprocessData
dancontentType
untukfalse
.sumber
$('input[type=file]').value=blob
Anda sebenarnya tidak harus menggunakan
FormData
untuk mengirimBlob
ke server dari JavaScript (danFile
juga aBlob
).Contoh jQuery:
Contoh Vanilla JavaScript:
Memang, jika Anda mengganti formulir multibagian HTML tradisional dengan implementasi "AJAX" (yaitu, back-end Anda menggunakan data formulir multibagian), Anda ingin menggunakan
FormData
objek seperti yang dijelaskan dalam jawaban lain.Sumber: Trik Baru di XMLHttpRequest2 | HTML5 Rocks
sumber
Saya tidak bisa mendapatkan contoh di atas untuk bekerja dengan blob dan saya ingin tahu apa sebenarnya di upload.php. Jadi ini dia:
(hanya diuji di Chrome 28.0.1500.95)
Isi dari upload.php:
sumber
data: fd,
dalamajax
pemanggilan fungsi menjadidata: blob,
.Saya bisa mendapatkan contoh @yeeking untuk bekerja dengan tidak menggunakan FormData tetapi menggunakan objek javascript untuk mentransfer gumpalan. Bekerja dengan blob suara yang dibuat menggunakan recorder.js. Diuji di Chrome versi 32.0.1700.107
Isi dari upload.php
sumber
Pembaruan 2019
Ini memperbarui jawaban dengan Fetch API terbaru dan tidak membutuhkan jQuery.
Penafian: tidak berfungsi di IE, Opera Mini, dan browser lama. Lihat caniuse .
Pengambilan Dasar
Ini bisa sesederhana:
Ambil dengan Penanganan Kesalahan
Setelah menambahkan penanganan kesalahan, ini akan terlihat seperti:
Kode PHP
Ini adalah kode sisi server di upload.php.
sumber
Saya mencoba semua solusi di atas dan sebagai tambahan, yang ada di jawaban terkait juga. Solusi termasuk namun tidak terbatas pada meneruskan blob secara manual ke properti file HTMLInputElement, memanggil semua metode readAs * pada FileReader, menggunakan instance File sebagai argumen kedua untuk panggilan FormData.append, mencoba mendapatkan data blob sebagai string dengan mendapatkan nilai-nilai di URL.createObjectURL (myBlob) yang ternyata buruk dan merusak mesin saya.
Sekarang, jika Anda mencobanya atau lebih dan masih tidak dapat mengunggah blob Anda, itu bisa berarti masalahnya ada pada sisi server. Dalam kasus saya, blob saya melebihi http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize dan batas post_max_size di PHP.INI sehingga file tersebut meninggalkan front end formulir tetapi ditolak oleh server. Anda dapat meningkatkan nilai ini secara langsung di PHP.INI atau melalui .htaccess
sumber