当前位置:首页 » 文件管理 » ioswebview图片上传

ioswebview图片上传

发布时间: 2023-09-24 11:35:47

上传图片并预览的网页代码在浏览器可以,但是在android的webview上不行

出现这个问题大多都是因为路径不对

把你的图片放进你要上传的那个文件里面,在从新增加这个张图片就行了

上传到空间有时会丢失衔接或图片,你可以把丢失的那个HTML文件在空间删了在从新上传就可以了,记得把图片也一同上传

检查一下路径
你建站的文件在E:\1,那么你的图片途径必须是E:\1\***.gif或***.JPGE等

㈡ H5调用本地相册/相机上传图片

在开发中有时候会用到H5调用本地图片粗伏或者相机,像第三方的实名认证,在线客服等蔽凳档等都需要上宏乱传图片。H5中只需要通过 <input> 调用即可,ios是可以的实现的,不需要自己处理,除非客户端压缩图片,但是Android中需要自己处理,比较坑,本文记录H5调用本地图片或者相机的实现过程以及遇到的问题。

H5主要是通过 input 标签来获取图片

通过 WebView 加载 h5 页面,监听 WebView 对应的方法,实现自己的逻辑。

当点击 input 标签的时候会调用 WebChromeClient 的 onShowFileChooser() 方法(5.0+)或者 openFileChooser() 方法(3.0+)在改方法中处理自己逻辑,这里是弹出一个原生的选择框,选择从相册还是拍照获取图片。

拍照和打开相册功能封装到了 PhotoUtils 工具类中了。

file_paths.xml

从相册中选择

onActivityResult() 方法处理

这里使用 Luban 压缩以后再上传的

㈢ 图片拍照上传解决方案

微信内置浏览器,和一些主流浏览器支持调用摄像头,但也有很多不支持调用摄像头,仅支持相册。
如果是WebView中,就需要客户端支持了,android和ios的权限也是问题。

formData 简介

简单的说就是:通过formData,我们可以用ajax方式来发送表单数据;以前上传图片是需要用form表单提交的。

我们知道浏览器默认显示的文件上传按钮是很丑的,通常UI都会对上传按钮进行设计。有以下几种方案来写样式。

弊端:

通过ref获取上传按钮。

ref方式

event.target方式

坑:

FileReader 简介

通过 readAsDataURL() ,在读取操作完成后,result属性中将包含一个data:URL格式的字符串以表示所读取文件的内容。

base64字符串

兼容性

我在safari中测试,发现是支持的。

URL.createObjectURL 简介

通过URL.createObjectURL()创建一个URL对象,这个URL对象表示指定的file对象或Blob对象。

兼容性

张鑫旭的文章: HTML5 file API加canvas实现图片前端JS压缩并上传

张鑫旭的文章: 理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型

使用Camera API
张鑫旭

㈣ iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货满满)

WKWebView是苹果在iOS 8之后推出的框架,关于它比webview的优势这里就不讲了。主要说一下与JS交互的问题,其实WKWebView已经内置了JS与OC的互调、传值等方法,使用起来也非常方便,下面就来细细的探讨一下以及自己遇到过的坑...

首先来看下WKWebView的初始化相关设置:

一、导入相关头文件、设置相关代理和属性

二、WKWebView初始化

注意:
楼主遇到的第一个坑:如果JS给OC传值为空,必须写成: postMessage(null),如果什么都不写,方法是调不通的。

1、在viewWillAppear中配置, addScriptMessageHandler name: "这里就是JS的方法,方法名必须统一"

楼主遇到的第二个坑:配置完后必须在 viewWillDisappear 中 remove,否则会造成循环引用,导致crash

2、实现 WKScriptMessageHandler 协议

以上就是JS调OC,JS向OC传值...

楼主这里举三个例子:
1: webview加载完成前,将用户信息传给js
2: webview加载完成,将相关信息传给js
3: 调用相册或相机时,将选择的图片请求后台接口,后台返回图片地址,将该地址回传给H5,H5将图片显示到页面上

第一个例子: webView加载完成前传值
因为 evaluateJavaScript 方法默认是在加载完成后调用,所以直接在页面开始加载中调用是传不过去的,这个时候怎么办呢? 我们可以让js端写两个方法, 第一个方法是js端开始向oc端发起信息需求的方法名,当oc端收到该方法名的时候,就去调用js端第二个获取传值的方法,把信息传递过去。

先让JS端写个方法调OC,OC实现方法后在这个方法内部给JS传值

在WKScriptMessageHandler协议中,实现该方法,然后在方法内部给JS传值

注意: 以上就是在Webview加载完成前传值,如果打印没报错,证明传参成功,如果web端没收到,让他把获取到值的方法写到页面中即可。

第二个例子: webView加载完成,传值给js

第三个例子: 传图片地址给js,js拿到后显示图片

1:拍照事件

1.1:将拍的照片请求上传图片接口,成功返回图片地址,并传值给H5

2: 从相册中选取照片

2.2:将相册中选取的照片请求上传图片接口,成功返回图片地址,并传值给H5

注意: getPhotoCallback 即为调用的方法名,后面传值格式必须为: ('') , 这里遇到了第三个坑, 如果方法名写为: 名称.名称 (例如:hello. getPhotoCallback),这种是调不通的,可以写成hello_getPhotoCallback的形式,一般的话最好还是定义一个完整的名称。 刚开始这个问题卡了比较久,一直调不通,在此记录一下.....

在 viewDidLoad 中注册进度条监听

开始加载网页

加载完成

加载失败

页面跳转失败

progressView懒加载

添加监听观察者

最后别忘记 removeObserver

Demo地址: https://github.com/zhwIdea/WKWebViewAndJS

热点内容
python的execute 发布:2025-03-16 21:40:24 浏览:765
今天的访问量就靠你了 发布:2025-03-16 21:39:35 浏览:428
linux分区表查看 发布:2025-03-16 21:20:17 浏览:643
java多个if 发布:2025-03-16 21:15:46 浏览:694
可乐存储 发布:2025-03-16 21:15:07 浏览:871
ios迁移安卓用什么助手 发布:2025-03-16 20:12:42 浏览:720
python异常值处理 发布:2025-03-16 20:12:42 浏览:581
POtn编程 发布:2025-03-16 20:06:11 浏览:776
竞彩资金怎么配置 发布:2025-03-16 20:01:57 浏览:10
在终端中打开编译环境 发布:2025-03-16 19:57:34 浏览:601