老夫最近需要做一个项目,需要调用服务器段的一些网页来选择文件,刚开始还挺纠结的,不知从何下手,网上大致预览了大神们走过的路,他们传统的方式都是使用一下代码:

 public void openFileChooser(ValueCallback<Uri> uploadMsg,
String acceptType, String capture) {
mUploadMessage = uploadMsg;
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
context.startActivityForResult(
Intent.createChooser(intent, "完成操作需要使用"),
WebMainActivity.FILECHOOSER_RESULTCODE); }

看了一下网上的朋友,基本上都是一样的代码,全部都是蜘蛛抓取别人的文档,恶心无比!本人很讨厌,直接导致了我要得到的搜索结果已经被海量的垃圾覆盖,不过,从http://stackoverflow.com/找到了我想要的代码,诶,蛮失望的,对国内的一些程序员博客等....

好了,废话,上叙的代码,其实根本就不满足我们的需要,至少我们的产品经理一般的想法就是希望我们能从相机中或者相册中选择图片的,这才是他们的核心要求,所以,我们必须自定义属于自己的弹出框界面的

不过,说这个上传前,先讲几个小知识吧;

如果你是使用webview的时候,会不会莫名其妙的打开系统的浏览器,是不是很纠结的!
其实要自定义属于我们自己的东西---WebViewClient,其实定义了就是啥操作也不错 呵呵

/***
* 自定义WebViewClient,否则会自动跳转到系统的浏览器的
* @author spring sky
* 创建时间:Aug 19, 20133:40:18 PM
*/
private class MyWebViewClient extends WebViewClient{
private Context mContext;
public MyWebViewClient(Context context){
super();
mContext = context;
} @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d(TAG,"URL地址:" + url);
super.onPageStarted(view, url, favicon);
} @Override
public void onPageFinished(WebView view, String url) {
Log.i(TAG, "onPageFinished");
super.onPageFinished(view, url);
}
}

然后调用我们自定义的WebViewClient:

mWebView.setWebViewClient(new MyWebViewClient(this));

现在我们开始说说弹出框的问题吧,经过stackoverflow的牛人说明,android源码的html标记<input type=file> 在选择文件,其实就是自定义WebChromeClient,所以我们要在这个里面做处理,但是有一点,因为android的系统有一直升级(google为了追求完美),所以很多功能都是逐步的实现的,这就是照成了兼容性的问题,需要说明的是,这对我们的弹出框没任何影响,首先,我们要自定义我们的MyWebChromeClient

代码如下:

/***
* 自定义WebChromeClient,做选择图片处理
* @author spring sky
* 创建时间:Aug 19, 20133:40:46 PM
*/
private class MyWebChromeClient extends WebChromeClient { // For Android 3.0+
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
if (mUploadMessage != null) return;
mUploadMessage = uploadMsg;
selectImage();
}
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
openFileChooser( uploadMsg, "" );
}
// For Android > 4.1.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
openFileChooser(uploadMsg, acceptType);
} }

以上的代码就是已经兼容了目前的android所有市场版本了,需要说明的是:selectImage(); 就是我定义的一个方法,内容就是弹出来一个选择框,选择相册和camera,这点,我觉得没必要讲了吧,反正给你们要共享代码的,还有一点,就是很多朋友反馈我之前写的代码在选择相册或相机的时候程序崩溃,这次我彻底的解决了这个问题,还是版本兼容的问题,烦烦烦.....程序员的烦恼....伤不起....

服务器端我是用的是javaEE的struts上传,有地方说明一下吧:

1.我当时用的是apache-tomcat7作为我的服务器端,大家都知道上传文件,上传的时候都会先把客户端发过来的文件保存在临时的文件中,然后上传完成就会copy到正式的文件,之后临时文件会删除,至于为什么,如果你是一个多思考的人,你会明白为什么,如果不知道为什么,希望你去多想想为什么,人的大脑不是为了谈恋爱,赚钱的,是用来思考的,实在不明白为什么,请在思考了以后找我!QQ:840950105

我的电脑是mac系统,所以在struts.xml配置了这样的代码:

<constant name="struts.multipart.saveDir" value="/Users/mac/Documents/tomcat/apache-tomcat-7.0.42/temp"/>

希望各位大哥大姐一定要注意这点,因为之前很多人就问我,为什么我上传老是失败,需要先把临时目录配置好,如果是window系统的话,肯定找不到/Users/mac/Documents/
这呀的目录的,各位大哥大姐,小弟真心的希望你们在学习程序的过程中多注意别人说的每一个重点地方,多自己找找错误,解决问题,这样就能走出自己的路!

2.一下代码,如果稍微东一点点代码的人,都会看懂的,request存放两个值,一个上传的消息,一个上传后的文件路径!(顺便说一下,我的javaEE好多年没折腾了,都忘记的差不多了,随便写的服务器端,请大家多多见谅,诶,程序员伤不起,过两年回家种田了...产品经理折磨我...测试折磨我...尼玛客户这不懂那不明白的也折磨我...)

		ServletActionContext.getRequest(). setAttribute("typeError",
result);
ServletActionContext.getRequest().setAttribute("uploadFile", rsImage);

以上基本上都是核心的技术点了,没啥了!

需要说明的是,大家在拿到我的android客户端代码,请先把自己的webview需要load的url修改为自己部署javaEE的项目url,切记切记,不然,老夫真的要吐血身亡了!

废话不说了,哥讨厌那些使用蜘蛛爬来爬去的博客和网站,小弟恳请希望这些站长能活出自己的人生,别装逼的拿着别人的经验给自己做装逼炫耀的资本!路都是自己走出来的,别吃了别人拉下来的还喊香!

版权:spring sky
共享的代码如下:
android客户端代码
javaEE服务器端代码

顺便说一下,本人年纪不小了,为了能做出自己的一些事情,有点创业的想法,如果有创业的朋友缺忠诚的合作伙伴,请联系我!(专注于android ios开发,没有神一样的智商,但拥有不屈不服的心,不为困难而低头,只为理想而拼搏)

android使用webview上传文件(支持相册和拍照)的更多相关文章

  1. Android应用开发中webview上传文件的几种思路

    1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...

  2. 关于Android WebView上传文件的解决方案

    我们在开发需求的时候,难免会接入一下第三方的H5页面,有些H5页面是具有上传照片的功能,Android 中的 WebView是不能直接打开文件选择弹框的 接下来我讲简单提供一下解决方案,先说一下思路 ...

  3. WebView 上传文件 WebChromeClient之openFileChooser函数

    原链接:http://blog.saymagic.cn/2015/11/08/webview-upload.html?utm_source=tuicool&utm_medium=referra ...

  4. HTML上传文件支持大文件上传,下载

    上传 1.修改配置文件web.config,在<system.webServer>下面加入 <security> <requestFiltering > <r ...

  5. Android 网络编程--上传文件及相应的参数到服务器

    之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...

  6. Android webview 上传文件不调用openFileChooser解决办法

    html页面带有图片上传功能,关于使用openFileChooser方法去选择图片,并且在onActivityResult方法里面设置返回的图片url文件路径,网上有很多,再次不再赘述. 实践中发现, ...

  7. 纯 js 实现上传文件支持拖拽

    开发「bufpay.com 个人即时到账收款平台」 后台需要支持开发者的微信和支付宝二维码上传. <p> <button class="btn btn-primary&qu ...

  8. 「NetworkOnMainThreadException」:Android 2.3到Android 4.0上传文件的问题

    我在百度知道上的提问: 『之前我用的一段文件上传的代码,配合服务器端的servlet,实现了上传手机上的文件的功能:但是后来我把手机的Android系统从2.3升级到了4.0 ,同样的代码,同样的配置 ...

  9. 关于Android使用SFTP上传文件报错问题

    错误报告java.lang.NoClassDefFoundError:Failed resolution of: Lorg/ietf/jgss/Oid; 问题是由于 Lorg.ietf. jgss.O ...

随机推荐

  1. web开发学习之旅---html第一天

    一.认识浏览器 浏览器就是接收浏览着的操作,然后帮浏览者去web服务器请求网页内容(html格式返回),然后展现成人眼能够看得懂的可视化页面的软件. IE==浏览器?IE是浏览器的一种,还有Firef ...

  2. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

  3. HeaderViewListAdapter cannot be cast to listAdapter问题原因及解决办法

    [o] 在listView中添加leaderView 和footerView的时候要注意在setAdapter之前调用,不然会报如下异常: listAdapter cannot be cast to ...

  4. 关于MDCSwipeToChooseView的应用

    本人因为项目中某个页面的功能需要,用到了MDCSwipeToChooseView,就在网上查阅了相关的资料,资源有很多,但应该都是同一个人上传的,code4还有git上都有,但下载demo下来后运行不 ...

  5. 10.10_魔兽账号,OSC代码托管演示,研究SQL别忘记了,git

    (1)juedui8456juedui456chixin0769魔兽世界账号112288 (2)EasyXls.开源中国推出 PaaS@OSC 代码演示和运行平台.git.oschina.coding ...

  6. c# 与 winform 界面开发

    在 windows 下使用 vs2010 开发,未深入研究. c# 与 .net 开发,一堆又一堆的新名词,头晕目眩,比如 CLR / apartments / STA / MTA / COM 吐槽无 ...

  7. HttpHandler与HttpModule及实现文件下载

    HttpHandler:处理请求(Request)的信息和发送响应(Response).HttpModule:通过Http Module向Http请求输出流中写入文字,httpmodule先执行 它们 ...

  8. 360极速浏览器在XP系统下的一个bug

    今天在做页面开发的时候,发现360浏览器在XP系统下不支持focus事件,而主流的IE(包括IE6),firefox,chrome都没有这个问题.前段开发的悲剧啊,各种浏览器兼容性的问题.

  9. 配置php连接apache

    配置php连接apache 1.安装php所需要的库 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel li ...

  10. erlang 里的if 和 case

    case Expression of Pattern1 [when Guard1] -> Expr_seq1; Pattern2 [when Guard2] -> Expr_seq2; … ...