Utilisation de la saisie de formulaire pour accéder à la caméra et télécharger immédiatement des photos à l'aide de l'application Web

88

Je suis tombé sur cette réponse qui est géniale:

Dans iPhone iOS6 et à partir d'Android ICS, HTML5 possède la balise suivante qui vous permet de prendre des photos à partir de votre appareil:

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

La capture peut prendre des valeurs telles que l'appareil photo, le caméscope et l'audio.

Est-il possible d'aller plus loin en utilisant un ajax quelconque pour télécharger immédiatement une photo après sa prise?

Par exemple, en utilisant mon téléphone, une fois que je tape sur l'entrée, il ouvre alors l'appareil photo qui me permettra immédiatement de prendre une photo et de l'enregistrer. Lorsque je l'enregistre sur l'appareil photo, il est ensuite répertorié par le bouton d'entrée comme fichier à télécharger.

Que faudrait-il pour que cette photo soit immédiatement téléchargée au lieu d'attendre que l'utilisateur clique sur le bouton Soumettre du formulaire?

micah
la source
1
Qu'avez-vous déjà essayé? Qu'avez-vous perplexe?
Marcin
Si vous êtes intéressé par les contrôles tiers, vous pouvez considérer Kendo UI demos.kendoui.com/web/upload/api.html
HaBo
1
@Marcin Je n'ai jamais été fort avec javascript donc je ne savais même pas quoi essayer. Ce que j'essaie de reproduire, c'est la fonction native de l'application où la photo est immédiatement téléchargée vers le service ou le serveur distant sans étape supplémentaire après avoir pris une photo avec l'appareil photo.
micah

Réponses:

103

C'est vraiment facile à faire, envoyez simplement le fichier via une requête XHR à l'intérieur du gestionnaire onchange de l'entrée de fichier.

<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
la source
1
Merci pour cette réponse. Donc, cet écouteur d'événements surveille l'entrée # myFileInput pour un changement, sachant quand une photo est mise en file d'attente pour être téléchargée? Et puis je suppose qu'il exécutera la fonction sendPic avec l'objet FormData téléchargeant automatiquement la photo? Je comprends ce qu'est XHR à un niveau très élevé. Ai-je bien compris?
micah
L'écouteur d'événements est appelé une fois que l'utilisateur a sélectionné un fichier.
Ray Nicholus
Ainsi, l'écouteur d'événements invite le sendPic()à télécharger immédiatement le fichier après que l'appareil photo ait pris la photo?
micah
1
Pouvez-vous m'indiquer la bonne direction pour savoir comment envoyer un formulaire via XHR?
iluvpinkerton
3
@iluvpinkerton Bien sûr, utilisez (ou jetez un œil à) Fine Uploader ou ajax-form . Clause de non-responsabilité - Je suis le développeur des deux bibliothèques.
Ray Nicholus