html ajax 图片上传,HTML5 FileReader API 与 Ajax上传图片/文件

本文探讨了在开发中避免过度依赖大型工具,以WebUploader为例,介绍了如何实现文件读取和上传的基本操作。通过监听input[type=file]的change事件获取file对象,利用FileReader API的readAs*方法读取文件,并通过Ajax和FormData实现异步上传。同时,文章强调了关注实际需求和提高效率的重要性。
摘要由CSDN通过智能技术生成

在日常工作中,引用第三方工具是很常见的事。但是如果为了满足某一个需求,而引用一个巨大的工具,而实际情况却是仅仅使用到这个工具所有功能的冰上一角,这是相当没有规划,没有追求的行为。为了告别Web Uploader(当然这是一个很出色的工具),我用这篇文章理一理文件读取与上传的相关知识。

文件读取

首先我们需要一个上传的控件。

如果你嫌弃原生的上传控件颜值不优雅,可以自行用模拟一个,监听点击事件并触发一只隐藏的input[file]。

当有文件传入时,会触发onchange事件

fileUploadBtn.addEventListener('change', callback)

此时我们可以拿到上传的file对象,包含了上传文件的相关信息详情点这儿。

var callback = function () {

var file = this.files[0]

}

FileReader API 提供了四种读取文件方式,名字也取得相当语义化。

var reader = new FileReader()

reader.readAsText(file, encoding)

reader.readAsDataURL(file)

reader.readAsBinaryString(file)

reader.readAsArrayBuffer(file)

reader.readyState 记录着reader的状态。

0:new之后

1:执行上述四个读取方法之一后

2:读取完毕,触发onload事件

reader读取文件是异步操作,主要的生命周期Event和常规异步(如Ajax)很相似。

// 上传进度

reader.onprogress = function (ev) {

if (ev.lengthComputable) { // 文件的长度是否可计算

ev.total // 文件总长

ev.loaded // 已加载

}

}

// 上传成功

reader.onload = function () {

reader.result // 文件信息

}

// 上传失败

reader.onerror = function () {

reader.error // 错误信息

}

// 上传完成

reader.loadend = function () {}

// 上传开始

reader.loadstart = function () {}

构造FormData及Ajax上传文件

在前后端分离与Ajax大行其道的今天,我们这一代人多少对 FormData 有些陌生。今天也算是涨见识了。

var callback = function () {

var file = this.files[0]

var xhr = new XMLHttpRequest()

// new一个FormData实例

var formData = new FormData()

// 将file对象添加到FormData实例

formData.append('file', file)

xhr.open('POST', 'url', true)

xhr.send(formData)

xhr.onreadystatechange = function() {

if (xhr.readyState === 4) {

if (xhr.status === 200) {

// doSomeThing(this)

} else {

// error(this)

}

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值