web-dev-qa-db-fra.com

Le navigateur Web Android Android permet-il de télécharger des photos prises à partir de l'appareil photo?

L'une des exigences cruciales de l'application que j'écris est que l'utilisateur puisse télécharger (type d'entrée = "fichier") une photo à partir d'un formulaire.

Le navigateur Web Android prend-il en charge les téléchargements de fichiers? Si oui, toutes les versions 1.5+ le prennent-elles en charge?

29
Dynamikus

Oui et non. Certaines personnes semblent avoir des problèmes à le faire (comme indiqué dans les commentaires). Bien que cela ait fonctionné pour tous mes appareils, il est tout à fait possible qu'un navigateur différent ne puisse pas du tout implémenter cette fonctionnalité .

L'utilisateur ne peut cependant pas télécharger de fichier sur la carte SD, mais des fichiers audio, vidéo et image qui se trouvent sur le stockage interne/externe. Le type de fichiers que vous pouvez télécharger dépend des applications installées. Si vous avez installé un gestionnaire de fichiers (ou livré avec le système d'exploitation), vous pouvez également l'utiliser pour télécharger le fichier que vous souhaitez (Gallery et Mediaplayer doivent toujours être présents).

Lorsque le bouton de téléchargement d'un <input type="file"> est enfoncé, les navigateurs semblent envoyer le Intent.ACTION_GET_CONTENT- Intent , donc chaque application qui l'écoute est une source de fichier possible.

10
Lukas Knuth

Vous pouvez utiliser ceci:

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

L'important c'est

capture = "appareil photo"

EDIT: selon la dernière spécification, la capture est un attribut booléen

19
bullgare

Le format correct pour l'entrée HTML de l'API de périphérique est:

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

Ceci est pris en charge par les appareils avec Android 3.0 (pour les tablettes) ou Android 4.0 et versions ultérieures (pour les téléphones). Je ne sais pas quelle version d'iOS commence à soutenir cela.

10
Will

Je voulais un moyen plus facile de retirer des fichiers de mon téléphone plutôt que de retirer la carte SD et je pensais simplement qu'un programme CGI les recevrait sur un serveur Web, alors j'ai eu la même question. J'ai écrit un petit script qui peut réussir à télécharger des fichiers depuis des ordinateurs distants à l'aide d'un navigateur Web. Cela ressemble à ceci:

#!/usr/bin/python
import os
import cgi

def tag(tag, contents=None, attlist=None):
    tagstring= "<"+tag
    if attlist:
        for A in attlist:
            V= attlist[A].replace('"','&quot;')
            attstring= ' '+A+'="'+V+'"'
            tagstring += attstring
    if contents:
        tagstring += ">\n"+contents.rstrip()+"\n</"+tag+">\n"
    else:
        tagstring += "/>\n"
    return tagstring

content_type= 'Content-type: text/html\n\n'
form = cgi.FieldStorage()

if not form:
    acturl= "./up.py"
    ff= tag('input','',{'type':'file','name':'filename'}) + tag('input',''{'type':'submit'})
    f= tag('form',ff, {'action':acturl, 'method':'POST', 'enctype':'multipart/form-data'})            
    H= tag('head', tag('title', "Uploader"))
    B= tag('body', tag('p', f))
    print content_type + tag('html', H + B)
Elif form.has_key("filename"):
    item = form["filename"]
    if item.file:
        data = item.file.read()  
        t= os.path.basename(item.filename)
        FILE= open("/home/user/public_html/uploads/"+t,'w')
        FILE.write(data)
        FILE.close
        msg= "Success! " 
    else:
        msg= "Fail. "

    H= tag('head', tag('title', "Uploader"))
    B= tag('body', tag('p', msg + tag('a','Another?',{'href':'./up.py'})))
    print content_type + tag('html', H + B)

Faire un test avec un programme comme celui-ci est le seul moyen sûr de savoir si votre marque de navigateur de téléphone fait ce que vous voulez, mais pour moi: cela a fonctionné. J'ai même pu utiliser Apache mod_auth pour exiger un nom d'utilisateur et un mot de passe et le navigateur Android me laisse poliment saisir cela. Ensuite, lorsque j'ai sélectionné le bouton Choisir un fichier, il a fait apparaître un menu proposant de laisser J'ai choisi la galerie, l'application musicale, l'enregistreur de sons et une application de gestion de fichiers que j'ai installée. J'ai choisi un fichier dans la galerie et, même si cela a pris du temps, il s'est bien téléchargé. La réponse à ma question était donc " oui ". Et pour vous - essayez un programme de test comme celui affiché.

1
Chris XE

Oui, puisque Android 3.0 vous pouvez utiliser la caméra de l'appareil via l'API de l'appareil. Cet extrait est tiré de

<form enctype="multipart/form-data" method="post">
  <h2>Regular file upload</h2>
  <input type="file"></input>

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

  <h2>capture=camcorder</h2>
  <input type="file" accept="video/*;capture=camcorder"></input>

  <h2>capture=microphone</h2>
  <input type="file" accept="audio/*;capture=microphone"></input>
</form>

Cette source semble intéressante quand il s'agit de vérifier le support html5 dans les appareils mobiles.

1
libnull-dev