天天看点

移动端图片操作(一)——上传一、accept属性二、change事件三、File对象四、FileReader五、URL对象六、Blob对象七、formData

友情提示在,在Android手机webview中,是不支持上传文件的,网上说是修改Android端的代码,但我没试过,我们这边是使用客户端提供的接口来实现上传的。

该属性表明了服务器端可接受的文件类型,可以限制你手机选择相关的文件,如果限制多个,可以用逗号分割,下面的代码就表示只能选择图片与音频相关的文件:

移动端图片操作(一)——上传一、accept属性二、change事件三、File对象四、FileReader五、URL对象六、Blob对象七、formData

在移动端,点击后会让你选择拍照或相册,还是蛮高大上的。下图是UC浏览器中:

移动端图片操作(一)——上传一、accept属性二、change事件三、File对象四、FileReader五、URL对象六、Blob对象七、formData

一般选择文件都会使用“change”事件,下面的代码就是绑定了change事件,弹出文件大小:

1) 有些手机浏览器在点击的时候,会弹出键盘选择,我用onfocus="this.blur()",来强制失去焦点。

2) 当选择过一次后,再次选择同一个文件,“change”事件不会触发,因为value没有改变,在网上看到个方法,我还没有在实际项目中使用,兼容性有待考证。

这里注意下:克隆一个元素节点会拷贝它所有的属性以及属性值,但不会拷贝那些使用addEventListener()方法或者node.onclick = fn用JavaScript动态绑定的事件。

File对象负责处理那些以文件形式存在的二进制数据,也就是操作本地文件。

1)File对象可以通过3种方式获取:

1. <input>元素上选择文件后返回的FileList对象中的成员

2)File对象有9个属性,这里就只介绍3个:

Blob可以“append”,ArrayBuffer数据。ArrayBuffer存在的意义就是作为数据源提前写入在内存中,就是提前钉死在某个区域,长度也固定。

下面的代码是获取data:URL,可以将返回的result内容赋值给img的src,用于预览等操作。

移动端图片操作(一)——上传一、accept属性二、change事件三、File对象四、FileReader五、URL对象六、Blob对象七、formData

URL对象是硬盘上指向文件的URL。上面的例子中获取图片的引用,通过读取data URI,data URI是个一大串的字符。

图片原本就在硬盘上,还要转换成另一个格式再用,有点绕了,完全可以直接引用文件的URL,下面是两个方法:

console.log(url)内容如下:

移动端图片操作(一)——上传一、accept属性二、change事件三、File对象四、FileReader五、URL对象六、Blob对象七、formData

在移动端需要做个兼容性判断:

File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件。

1)创建Blob对象的4种方法:

1. 调用Blob构造函数

2. 使用一个已有Blob对象上的slice()方法切出另一个Blob对象

3. 调用canvas对象上的toBlob方法

2)利用Blob对象,生成可下载文件

3)通过slice方法,将二进制数据按照字节分块,返回一个新的Blob对象

利用FormData对象,可以使用键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。

使用FormData的最大优点就是我们可以异步上传一个二进制文件。

参考资料:

    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/5181701.html,如需转载请自行联系原作者

继续阅读