android 网络浏览器是不是允许上传刚从相机拍摄的照片?

Posted

技术标签:

【中文标题】android 网络浏览器是不是允许上传刚从相机拍摄的照片?【英文标题】:Does the android web browser allow uploading photos just taken from camera?android 网络浏览器是否允许上传刚从相机拍摄的照片? 【发布时间】:2011-09-28 00:49:55 【问题描述】:

我正在编写的应用程序的一个关键要求是用户能够从表单中上传(输入类型=“文件”)照片。

android web 浏览器是否支持文件上传?如果是,是否所有版本 1.5+ 都支持它?

【问题讨论】:

***.com/questions/2935946/… Thnx niky 但我不打算开发 Android 应用程序。我需要在 web html 中完成。 我需要知道 在 Android 设备上的工作位置,或者是否有允许从网页浏览手机存储文件然后上传的 HTML5 功能那些来自表格。在服务器端我知道如何处理。 【参考方案1】:

你可以用这个:

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

重要的是

capture="相机"

编辑:根据最新规范,捕获是一个布尔属性

【讨论】:

我找到了w3.org spec,但上面写着 2013 年 5 月 9 日,这太新了,我想知道它是否可靠...... 我有一个应用程序,它只是在其窗口中显示一个 .html 页面...这不会启动文件查看器来选择平板电脑上的文件。 感谢您的精彩回答。但是我怎样才能显示带有附加画廊选项的捕获选项。使用您的版本,我只能捕获新图片。 (三星 Galaxy s4 是我的测试手机) 据我记忆,这取决于手机。不幸的是。 哇.. 这解决了三星 Android 设备中的问题.. Tnx Man.:) +1【参考方案2】:

是和不是。有些人这样做似乎有问题(如 cmets 中所述)。尽管它适用于我的所有设备,但完全有可能其他浏览器根本无法实现此功能

但用户不能上传 SD 卡上的任何文件,但可以上传内部/外部存储中的音频、视频和图像文件。 您可以上传的文件类型取决于在已安装的应用程序上。如果您安装了文件管理器(或随操作系统提供),您还可以使用它来上传您想要的任何文件(画廊和媒体播放器应该始终存在)。

当按下&lt;input type="file"&gt; 的上传按钮时,浏览器似乎会发送Intent.ACTION_GET_CONTENT-Intent,因此每个侦听此消息的应用程序都是一个可能的文件源。

【讨论】:

好的,这意味着项目的绿灯。谢谢卢卡斯 嗯,根据我的测试和 caniuse.com 上的信息(caniuse.com/#search=HTML5 表单功能),这根本不起作用 @Ridcully 请澄清一下。 好吧,只需使用&lt;input type="file" multiple /&gt; 创建一个html 页面。在 Chrome 等桌面浏览器上,这允许您选择多个文件,但在 Android 上,您只能选择一个文件。我还发现了来自 Firefox for Android 开发人员的评论,他解释说他们不支持 multiple 属性,因为 Android 中没有标准的文件选择器可以让您选择多个文件。在上面提到的 caniuse.com 页面上,向下滚动到“HTML5 表单功能”,看到不支持(尤其是不支持多个)。 @Ridcully:您的评论仍然有用。为评论 +1!【参考方案3】:

设备 API HTML 输入的正确格式是:

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

运行 Android 3.0(适用于平板电脑)或 Android 4.0 及更高版本(适用于手机)的设备支持此功能。我不知道哪个版本的 ios 开始支持这个。

【讨论】:

【参考方案4】:

是的,从 Android 3.0 开始,您可以通过 Device API 使用设备的摄像头。 这个sn-p取自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>

This source 在检查移动设备中的 html5 支持时看起来很有趣。

【讨论】:

【参考方案5】:

我想要一种更简单的方法来从手机中取出文件,而不是取出 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)

使用这样的程序运行测试是了解您的品牌的手机浏览器是否符合您的要求的唯一可靠方法,但对我来说:它有效。我什至可以使用 Apache mod_auth 来要求用户名和密码,Android 浏览器礼貌地让我输入。然后,当我选择选择文件按钮时,它会弹出一个菜单让我从画廊、音乐应用程序、录音机和我安装的文件管理器应用程序中进行选择。我从图库中挑选了一个文件,虽然花了很长时间,但它上传得很好。所以对我来说这个问题的答案是“是”。对你来说 - 尝试一个像发布的那样的测试程序。

【讨论】:

以上是关于android 网络浏览器是不是允许上传刚从相机拍摄的照片?的主要内容,如果未能解决你的问题,请参考以下文章

解决ios手机上传竖拍照片旋转90度的问题

Android Webview 文件和相机上传 - Kotlin

Cordova 相机返回 guid 不是 b64 或带有“xxx.png”的路径。需要上传文件

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

应用相机崩溃

HTML5 Safari iOS 只能访问相机而不是照片库