webview 本地上传文件

参考http://blog.csdn.net/zhtsuc/article/details/49154099

直接上代码

public class MainActivity1 extends Activity {

private WebView webView;

private WebSettings wvsetting;

private ImageView news_iv;

public ValueCallback<Uri> mUploadMessage;

public ValueCallback<Uri[]> mUploadMessageForAndroid5;

public final static int FILECHOOSER_RESULTCODE = 1;

public final static int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

WebView webView = (WebView) this

.findViewById(R.id.news_content_webview);

webView = (WebView) this.findViewById(R.id.news_content_webview);

news_iv = (ImageView) this.findViewById(R.id.news_iv);

wvsetting = webView.getSettings();

// 设置是否允许通过file

// url加载的Javascript可以访问其他的源,包括其他的文件和http,https等其他的源。这个设置在JELLY_BEAN以前的版本默认是允许,在JELLY_BEAN及以后的版本中默认是禁止的

try {

if (Build.VERSION.SDK_INT >= 16) {

Class<?> clazz = webView.getSettings().getClass();

Method method = clazz.getMethod(

"setAllowUniversalAccessFromFileURLs", boolean.class);

if (method != null) {

method.invoke(webView.getSettings(), true);

}

}

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

// 内嵌图片时加载缓慢的问题

if (Build.VERSION.SDK_INT >= 19) {

wvsetting.setLoadsImagesAutomatically(true);

} else {

wvsetting.setLoadsImagesAutomatically(false);

}

// 屏幕适配滚动问题

wvsetting

.setUserAgentString("Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn;CmsTop Cloud Mobile) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0  Safari/537.36");

wvsetting.setJavaScriptEnabled(true);// 支持js

wvsetting.setSupportZoom(false);

wvsetting.setAllowFileAccess(true);

wvsetting.setDomStorageEnabled(true);

wvsetting.setSupportMultipleWindows(true);

wvsetting.setPluginState(WebSettings.PluginState.ON);

wvsetting.setLoadWithOverviewMode(true);

wvsetting.setUseWideViewPort(true);

wvsetting.setDefaultTextEncodingName("utf-8");

wvsetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

wvsetting.setAllowFileAccess(true);

webView.setWebChromeClient(new MyWebChromeClient());

webView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

});

webView.loadUrl("https://jinshuju.net/f/oRYFvm");

}

public class MyWebChromeClient extends WebChromeClient {

//扩展浏览器上传文件

//3.0++版本

public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {

openFileChooserImpl(uploadMsg);

}

//3.0--版本

public void openFileChooser(ValueCallback<Uri> uploadMsg) {

openFileChooserImpl(uploadMsg);

}

public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {

openFileChooserImpl(uploadMsg);

}

// For Android > 5.0

public boolean onShowFileChooser (WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {

openFileChooserImplForAndroid5(uploadMsg);

return true;

}

}

private void openFileChooserImpl(ValueCallback<Uri> uploadMsg) {

mUploadMessage = uploadMsg;

Intent i = new Intent(Intent.ACTION_GET_CONTENT);

i.addCategory(Intent.CATEGORY_OPENABLE);

i.setType("image/*");

startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);

}

private void openFileChooserImplForAndroid5(ValueCallback<Uri[]> uploadMsg) {

mUploadMessageForAndroid5 = uploadMsg;

Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);

contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);

contentSelectionIntent.setType("image/*");

Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);

chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);

chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");

startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5);

}

@Override

protected void onActivityResult(int requestCode, int resultCode,Intent intent) {

if (requestCode == FILECHOOSER_RESULTCODE) {

if (null == mUploadMessage)

return;

Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();

mUploadMessage.onReceiveValue(result);

mUploadMessage = null;

} else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){

if (null == mUploadMessageForAndroid5)

return;

Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();

if (result != null) {

mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});

} else {

mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});

}

mUploadMessageForAndroid5 = null;

}

}

}

时间: 2024-10-10 06:28:44

webview 本地上传文件的相关文章

本地上传文件到服务器,从服务器下载文件到本地

最近在做项目的时候涉及到了文件的上传.下载,以前学习IO时也没有搞得多清楚,在网上找了些上传下载的例子,然后修改了部分.经测试,上传下载文件暂时能用,下面是上传和下载的方法: 1.本地上传文件到服务器 html代码: <form id="uploadDatumInfo" name="uploadDatumInfo" method="post" enctype="multipart/form-data" target=&q

本地上传文件到github

我是一开始创建了用于远程访问项目仓库的ssh key 这篇文章不介绍搭建ssh key 1.先在github上创建仓库 首先登录自己的github,点击右上角的+号 , 然后 然后 然后 然后 出现这个 输入  git  init  结果如下 然后   git clone  +复制内容 然后 打开克隆到本地的文件夹,然后把要上传的文件放到里面 接着   ls  查看文件 接下来就开始上传文件了                    git  add .                    gi

CentOS7中利用Xshell6向虚拟机本地上传文件

环境交代 Linux系统:CentOS7, Xshell版本:6 操作步骤 下面我们以一个文件上传来演示用法 第一步 在Xshell中点击如下图标,或者直接按 Alt+Ctrl+F来新建文件传输 出现弹窗直接关闭即可 然后会出现以下界面 输入help 查看可用命令 我们主要用到的命令有put, cd, ls, lls, pwd, lpwd 第二步 选择文件夹 第三步 上传文件 命令行输入put 上传完成. 注意 上传文件时,本地路径最好不要修改,否则可能会出现 sftp: cannot open

Hadoop HDFS编程 API入门系列之从本地上传文件到HDFS(一)

不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs5; import java.io.IOException; import java.net.URI;import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.ha

本地上传文件至服务器的技巧(linux文件压缩及解压文件)

linux(ubuntu)文件解压及压缩文件 ubuntu支持文件的解压及压缩功能, 如果ubuntu上面没有安装过unzip工具的话,可以通过下面命令安装: sudo apt-get install unzip zip压缩文件夹,文件及解压文件的命令 1.压缩文件夹 zip -r 目标文件名.zip 要压缩的文件夹 2.把文件 unzip 文件 目的地 把/home目录下面的mydata.zip解压到mydatabak目录里面 3.把文件解压到当前目录 unzip 要解压的文件 其他的详细请查

xshell本地上传文件到Ubuntu上及从Ubuntu上下载文件到本地

1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务器通用)--只要相互间能ping得通. 2.第二种方法 :ubuntu环境下安装lrzsz,具体命令是--->      sudo apt-get install lrzsz      (如果是root权限就不用加sudo) 安装完毕后,具体操作命令是:   sz [file] --->可将服务器的文件下载到本地, (1)比如要把ubuntu上的urls.txt下载到本地,

Linux 几种上传文件到linux服务的方法

Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于

FTP上传文件速度太慢怎么办?

用户在建设网站时必不可少的一类工具就是文件传输工具.通过客户端和主机之间的文件交互,及时上传补丁文件.下载日志文件等,确保网站的正常稳定运行.但是也有不少用户反映使用FTP上传文件速度太慢,这是什么原因呢?FTP上传文件速度太慢怎么办?一.为什么FTP上传文件速度太慢? 运维人员在日常的工作中会使用FTP软件上传补丁.升级包.下载数据.日志等数据.FTP上传与下载速度慢,严重的影响运维人员的工作效率,与此同时一味的指责网络提供商,其实有些以偏概全. 为什么FTP上传文件速度太慢呢? FTP协议自

Windows文件传输篇:怎么上传文件到服务器?

很多时候,我们需要把文件传输到服务器上进行运行.部署等操作,在使用windows服务器的时候,我们都会遇到这样的问题:我们应该怎么上传文件到服务器?有没有简单的方法来实现本地文件上传到服务器呢? Windows文件传输方法之一: 将需上传的文件打包压缩,利用邮箱附件功能发到另一邮箱,随后在服务器上登录邮箱下载. Windows文件传输方法之二: 将数据上传至百度网盘或者微云等第三方存储服务,在服务器上登录即可下载. Windows文件传输方法之三: 远程登录服务器时,通过本地磁盘映射功能,将本地