web-dev-qa-db-ja.com

Android Webブラウザーは、カメラから撮影した写真のアップロードを許可しますか?

私が書いているアプリケーションの重要な要件の1つは、ユーザーがフォーム内から写真をアップロード(入力type = "file")できることです。

Android Webブラウザーはファイルのアップロードをサポートしますか?はいの場合、すべてのバージョン1.5+はサポートしますか?

29
Dynamikus

はいといいえ。一部の人々はそうするのに問題があるようです(コメントで概説されているように)。すべてのデバイスで機能しましたが、別のブラウザがこの機能をまったく実装していない可能性があります

ただし、ユーザーはSDカードにファイルをアップロードすることはできませんが、内部/外部ストレージにあるオーディオ、ビデオ、画像ファイルをアップロードできます。 アップロードできるファイルの種類は、インストールされているアプリケーションによって異なります。 File-Managerがインストールされている(またはOSに同梱されている)場合は、それを使用して必要なファイルをアップロードすることもできます(GalleryとMediaplayerは常に存在する必要があります)。

<input type="file">のアップロードボタンが押されると、ブラウザは Intent.ACTION_GET_CONTENT- Intent を送信するように見えるため、これをリッスンするすべてのアプリケーションがファイルソースになる可能性があります。

10
Lukas Knuth

これを使用できます:

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

重要なことは

capture = "カメラ"

編集:最新の仕様によると、キャプチャはブール属性です

19
bullgare

Device API HTML入力の正しい形式は次のとおりです。

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

これは、Android 3.0(タブレット用)またはAndroid 4.0以降(携帯電話用)のデバイスでサポートされています。どのバージョンのiOSが起動するのかわかりませんこれをサポートします。

10
Will

SDカードを抜くよりも簡単にファイルを携帯電話から取り出す方法が欲しかったので、CGIプログラムがWebサーバーでそれらを受信するように考えたので、同じ質問がありました。 Webブラウザーを使用してリモートコンピューターからファイルを正常にアップロードできる小さなスクリプトを作成しました。次のようになります。

#!/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)

このようなプログラムでテストを実行することが、your携帯電話ブラウザのブランドがあなたが望むことをするかどうかを知る唯一の確実な方法ですが、私にとっては:うまくいきました。 Apache mod_authを使用してユーザー名とパスワードを要求することもでき、Androidブラウザーが丁寧に入力させてくれました。その後、ファイル選択ボタンを選択すると、ギャラリー、音楽ap、サウンドレコーダー、インストールしたファイルマネージャーapから選択します。ギャラリーからファイルを選択しましたが、時間がかかりましたが、うまくアップロードできました。はい」。そして、あなたのために-投稿されたようなテストプログラムを試してください。

1
Chris XE

はい、Android 3.0以降、デバイスAPIを介してデバイスのカメラを使用できます。このスニペットは there

<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>

このソース は、モバイルデバイスでのhtml5サポートのチェックに関して興味深いものです。

1
libnull-dev