js 文件异步上传 显示进度条 显示上传速度 预览文件
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:34
通常文件异步提交有几个关键
1.支持拖拽放入文件。2.限制文件格式。3.预览图片文件。4.上传进度,速度等,上传途中取消上传。5.数据与文件同时上传
现在开始笔记:
需要一个最基础的元素<input id="inputFile" type=file multiple="multiple">
一、首先我们需要实现最基本的异步上传功能
//获得input元素的文件
var fileObj = document.getElementById("inputFile").files;
//定义一个表单数据对象
var form = new FormData();
//将文件input的文件信息放入表单数据对象中
for(var i in fileObj)
{
form.append("file[]", fileObj[i]); // 文件对象
}
//定义一个xhr对象
var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
//创建一个http请求
xhr.open("post",url,true);
//发送数据
xhr.send(form);
这样数据就上传成功了。
二、接下来说明如何捕获文件上传开始,过程中,结束的各种信息状态
主要是几个xhr回调函数
xhr.onload = function(evt){};//上传请求完成
xhr.onerror = function(evt){};//上传异常
xhr.upload.onloadstart = function(evt){};//开始上传
xhr.upload.onprogress =function(evt){};//上传进度 这个方法会在文件每上传一定字节时调用
evt.loaded//表示已经上传了多少byte的文件大小
evt.total//表示文件总大小为多少byte
通过这两个关键的属性就可以去计算 上传进度与速度
xhr.onreadystatechange = function(){}//当xhr的状态(上传开始,结束,失败)变化时会调用
该方法可以用来在文件上传完成后接收服务器返回的内容 xhr.responceText
中途取消上传 xhr.abort();
三、关于限制文件格式
在fileObj[i]中有个type属性可以使用
四、传文件的时候需要传其他数据
只需要
form.append("name","potatog");
这种键值录入即可。
只是需要注意后台获取数据是 不是在$_FILE中。
五、文件拖放
定义一个用来接收拖放事件的元素
如:
<div id="holder" style="width:150px;height:150px;border:5px solid red;"></div>
//检查浏览器是否支持拖放上传。
if('draggable' in document.createElement('span')){
var holder = document.getElementById('holder');
//当拖放的文件悬浮在该元素上方是触发
holder.ondragover = function () { this.className = 'hover'; return false; };
//当拖放的文件不再悬浮在该文件上方时调用
holder.ondragend = function () { this.className = ''; return false; };
//当拖放的文件放到该元素中时
holder.ondrop = function (event) {
event.preventDefault();
this.className = '';
//得到拖放的文件
var files = event.dataTransfer.files;
//将文件放入输入框对象的files中
fileObj.files = files;
fileObj.onchange();
return false;
};
}
六、预览图片
fileObj.onchange = function(){
// 检查是否支持FileReader对象
if (typeof FileReader != 'undefined') {
//能预览的文件
var acceptedTypes = {
'image/png': true,
'image/jpeg': true,
'image/gif': true
};
得到input=file元素中的所有文件信息
for(var i = 0; i < fileObj.files.length; i++)
{
//如果是支持预览的图片文件
if (acceptedTypes[fileObj.files[i].type] === true) {
//新建一个预览对象
var reader = new FileReader();
//绑定事件 当数据加载后执行 每有一张图片载入完成就会别调用。
reader.onload = function (event) {
//定义一个图片对象
var image = new Image();
//将对象载入的结果返回到图片元用来显示
image.src = event.target.result;
image.width = 100;
holder.appendChild(image);
};
//开始加载数据 文件
reader.readAsDataURL(fileObj.files[i]);
}
}
}
}
关于异步上传的封装demo代码
本文参考:
https://www.cnblogs.com/yuanlong1012/p/5127497.html
http://www.ruanyifeng.com/blog/2012/08/file_upload.html
- 上一篇: js 引入外部文件之 script 标签
- 下一篇: js 通过省份中号计算年龄
相关文章
-
js 引入外部文件之 script 标签
js 引入外部文件之 script 标签
- 互联网
- 2026年04月04日
-
js 中使用el表达式 关键总结:在js中使用el表达式一定要使用双引号
js 中使用el表达式 关键总结:在js中使用el表达式一定要使用双引号
- 互联网
- 2026年04月04日
-
js 转换0x开头的color
js 转换0x开头的color
- 互联网
- 2026年04月04日
-
js 通过省份中号计算年龄
js 通过省份中号计算年龄
- 互联网
- 2026年04月04日
-
js 输出JSON数组
js 输出JSON数组
- 互联网
- 2026年04月04日
-
js 实现数组元素交换位置
js 实现数组元素交换位置
- 互联网
- 2026年04月04日






