Utilizzo dell'input del modulo per accedere alla fotocamera e caricare immediatamente le foto utilizzando l'app Web


88

Mi sono imbattuto in questa risposta che è geniale:

In iPhone iOS6 e da Android ICS in poi, HTML5 ha il seguente tag che ti permette di scattare foto dal tuo dispositivo:

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

L'acquisizione può assumere valori come fotocamera, videocamera e audio.

È possibile fare un ulteriore passo avanti utilizzando ajax di qualche tipo per caricare immediatamente la foto dopo che è stata scattata?

Ad esempio, utilizzando il mio telefono, una volta che tocco l'ingresso, si apre quindi la fotocamera che mi permetterà immediatamente di scattare una foto e salvarla. Quando lo salvo sulla fotocamera, viene elencato dal pulsante di input come file da caricare.

Cosa sarebbe necessario per caricare immediatamente questa foto invece di aspettare che l'utente faccia clic sul pulsante Invia del modulo?


1
Cosa hai già provato? Cosa hai sconcertato?
Marcin

Se sei interessato ai controlli di terze parti, puoi prendere in considerazione Kendo UI demos.kendoui.com/web/upload/api.html
HaBo

1
@ Marcin Non sono mai stato forte con javascript, quindi non ero sicuro di cosa provare. Quello che sto cercando di replicare è la funzionalità dell'app nativa in cui la foto viene immediatamente caricata sul servizio o sul server remoto senza passaggi aggiuntivi dopo aver scattato la foto con la fotocamera.
micah

Risposte:


103

È davvero facile farlo, basta inviare il file tramite una richiesta XHR all'interno del gestore onchange dell'input del 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);

1
Grazie per questa risposta. Quindi questo listener di eventi sta guardando l'input # myFileInput per una modifica, sapendo quando una foto è in coda per essere caricata? E poi suppongo che eseguirà la funzione sendPic con l'oggetto FormData caricando automaticamente la foto? Capisco cosa sia XHR ad un livello molto alto. Ho capito bene?
micah

Il listener di eventi viene richiamato dopo che l'utente seleziona un file.
Ray Nicholus

Quindi il listener dell'evento richiede sendPic()di caricare immediatamente il file dopo che la fotocamera ha scattato la foto?
micah

1
Puoi indicarmi la giusta direzione per scoprire come inviare un modulo tramite XHR?
iluvpinkerton

3
@iluvpinkerton Certo, usa (o dai un'occhiata a) Fine Uploader o ajax-form . Disclaimer - Sono lo sviluppatore di entrambe le librerie.
Ray Nicholus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.