分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

ajax上传文件及进度显示

发布时间:2023-09-06 01:27责任编辑:彭小芳关键词:暂无标签

之前在博文:原生ajax写法就提及过ajax2.0与1.0的差别是多了FormData和利用FormData文件上传(当然还有跨域,但不是本文的重点)。

那么具体怎么样实现ajax上传文件呢?

一般来说,浏览器获取文件的方法有拖拽和input_file两种:

// 先定义一个放文件的数组var files = [];//拖拽事件获取文件div.addEventListener(‘drop‘,function(ev){ ???//因为dataTransfer.files只是类数组,所以要用Array.from转换一下 ???files = files.concat(Array.from(ev.dataTransfer.files));},false)// 从input_file获取files,假设有n个name为f1的input_file元素let input_files = Array.from(document.getElementsByName(‘f1‘));uploadBtn.onclick = function(){ ???input_files.forEach(input=>{ ????????files = files.concat(Array.from(input.files)); ???}) ???let formData = new FormData(); ???files.forEach(file=>{ ???????formData.append(‘name~~‘,file); ???}) ???let xhr = new XMLHttpRequest(); ???xhr.upload.onprogress = function(ev){ ???????console.log(‘进度:‘+(100*ev.loaded/ev.total).toFixed(2)+‘%‘); ???} ???xhr.open(‘POST‘,‘url~~‘,true); ???xhr.send(formData); ???xhr.onreadystatechange = function(){ ??????if(this.readyState == 4){ ??????????if(this.status==200){ ?????????????alert(‘上传成功~~‘); ?????????????files = []; ??????????} ??????} ???}}

ps:进度的显示那里,博主之前一直写错为xhr.onprogress,如果写成这样,那么进度过程就不会出现,直接让你等待,直到100%才显示

记住上传的时候无论是onprogress、onload还是onerror,都是xhr.upload对象下的事件才会生效,否则就会检测不了上传的过程,特别是xhr.upload.onprogress

ajax上传文件及进度显示

原文地址:http://www.cnblogs.com/amiezhang/p/7902808.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved