h5如何上传文件二进制流_h5上传文件的方法

本文介绍了H5如何通过异步方式上传文件,利用`input[type=file]`标签,结合XMLHttpRequest的xhr.upload.onprogress事件实现文件上传进度监控。详细讲解了FileReader对象的使用和FormData构造表单数据结构,最后展示了如何通过ajax发送multipart/form-data格式的数据到服务器。
摘要由CSDN通过智能技术生成

h5上传文件的方法:

H5标签提供了原生的 input[type=file] 标签支持文件上传功能。类似于表单提交,文件上传有两种,同步和异步,同步无法获得上传工程中的进度,异步是采用ajax方式上传,实时获得上传进度等信息。

异步上传文件,文件编码格式采用 multipart/form-data (https://segmentfault.com/a/1190000008791342#articleHeader3),原生对象 XMLHttpRequest 提供了 xhr.upload.onprogress 事件,xhr.upload.onprogress在上传阶段(即xhr.send()之后,xhr.readystate=2之前)触发,每50ms触发一次;xhr.onprogress在下载阶段(即xhr.readystate=3时)触发,每50ms触发一次。(https://segmentfault.com/a/1190000004322487)。(http://www.ruanyifeng.com/blog/2012/08/file_upload.html)

异步上传文件中其实还包含了一个文件读取的过程。异步上传文件的过程,首先是读取文件,返回一个文件对象,这时可以对文件对象进行读取操作。读取前需要新建一个fileReader对象, new FileReader();fileReader事件处理有6种:

onabort:文件读取终端,触发。

onerror:文件遇到错误触发。

onload:文件成功读取触发。

onloadstart:文件开始读取时触发。

onloadend:文件读取结束时触发(无论成功失败)。

onprogress:文件读取中触发。

fileReader读取方法,5种。

FileReader.abort()。中断读取操作,读取状态返回为done,即readyState=2。

FileReader.readAsArrayBuffer()。将文件读取为ArrayBuffer形式。

FileReader.readAsBinaryString() 。将文件读取为二进制字符串(非标准方法,不推荐使用)。

FileReader.readAsDataURL()。读取文件的URL,应用场景,本地预览图片。

FileReader.readAsText()。将文件已文本形式读取。即读取txt等。

(http://blog.csdn.net/j_bleach/article/details/53574789)

ajax上传文件的过程其实就是向后端发送数据的过程,只是数据不再是普通的json数据,而是原生表单数据结构,这时我们就需要手动建立一个表单数据结构,将文件对象放进表单数据结构里:

var formData = new FormData();

formData.append("file", document.getElementById('file').files[0]);

var xhr = new XMLHttpRequest();

xhr.open('POST', '/uploadurl');

// 上传完成后的回调函数

xhr.onload = function () {

if (xhr.status === 200) {

console.log('上传成功');

} else {

console.log('上传出错');

}

};

// 获取上传进度

xhr.upload.onprogress = function (event) {

if (event.lengthComputable) {

var percent = Math.floor(event.loaded / event.total * 100) ;

// 设置进度显示

$("#J_upload_progress").progress('set progress', percent);

}

};

xhr.send(formData);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值