Menggunakan input formulir untuk mengakses kamera dan segera mengunggah foto menggunakan aplikasi web

88

Saya menemukan jawaban yang brilian ini:

Di iPhone iOS6 dan dari Android ICS dan seterusnya, HTML5 memiliki tag berikut yang memungkinkan Anda mengambil gambar dari perangkat Anda:

    <input type="file" accept="image/*" capture="camera">

Pengambilan gambar dapat mengambil nilai seperti kamera, perekam video, dan audio.

Apakah mungkin untuk mengambil satu langkah lebih jauh dengan menggunakan ajax untuk segera mengunggah foto setelah diambil?

Misalnya, menggunakan ponsel saya, setelah saya mengetuk inputnya, itu kemudian membuka kamera yang akan segera memungkinkan saya untuk mengambil foto dan menyimpannya. Ketika saya menyimpannya ke kamera, itu kemudian terdaftar oleh tombol input sebagai file yang akan diunggah.

Apa yang diperlukan agar foto ini segera diunggah daripada menunggu pengguna mengklik tombol Kirim di formulir?

micah
sumber
1
Apa yang sudah kamu coba? Apa yang membuatmu bingung?
Marcin
Jika Anda tertarik dengan kontrol pihak ke-3, Anda dapat mempertimbangkan demo
HaBo
1
@Marcin Saya tidak pernah kuat dengan javascript jadi saya tidak yakin apa yang harus dicoba. Yang saya coba tiru adalah fitur aplikasi asli di mana foto segera diunggah ke layanan atau server jarak jauh tanpa langkah ekstra setelah mengambil foto dengan kamera.
micah

Jawaban:

103

Sangat mudah untuk melakukan ini, cukup kirim file melalui permintaan XHR di dalam penangan onchange input file.

<input id="myFileInput" type="file" accept="image/*;capture=camera">

var myInput = document.getElementById('myFileInput');

function sendPic() {
    var file = myInput.files[0];

    // Send file here either by adding it to a `FormData` object 
    // and sending that via XHR, or by simply passing the file into 
    // the `send` method of an XHR instance.
}

myInput.addEventListener('change', sendPic, false);
Ray Nicholus
sumber
1
Terima kasih atas jawaban ini. Jadi pendengar acara ini mengamati masukan # myFileInput untuk perubahan, mengetahui kapan foto diantrekan untuk diunggah? Dan kemudian saya kira itu akan menjalankan fungsi sendPic dengan objek FormData secara otomatis mengunggah foto? Saya memahami apa itu XHR pada level yang sangat tinggi. Apakah saya benar?
micah
Pemroses acara dipanggil setelah pengguna memilih file.
Ray Nicholus
Jadi event listener meminta sendPic()untuk segera mengupload file tersebut setelah kamera mengambil foto?
micah
1
Dapatkah Anda mengarahkan saya ke arah yang benar untuk mengetahui cara mengirim formulir melalui XHR?
iluvpinkerton
3
@iluvpinkerton Tentu, gunakan (atau lihat) Fine Uploader atau ajax-form . Penafian - Saya adalah pengembang kedua perpustakaan.
Ray Nicholus