/**
* 自定义文件上传工具 v1.1
* @param url 路径
*/
function fileUploader(url) {
var _date = new Date(); //日期 this._container_ = null;
this._file_ = null; this._init_1 = function (_uploader) {
return function () {
//生成文件上传控件
var _file = document.createElement("input");
_file.setAttribute("type", "file");
_file.setAttribute("name", "file_" + _date.getTime());
_file.setAttribute("id", "file_" + _date.getTime());
_file.setAttribute("multiple", "multiple"); //生成容器
var _container = document.createElement("div");
_container.setAttribute("id", "div_" + _date.getTime());
_container.appendChild(_file); //添加事件响应,这种方法很独特
_file.addEventListener("change", function (_uploader) {
return function () {
_ajax(_uploader);
}
}(_uploader)); //将对象传出
_uploader._file_ = _file;
_uploader._container_ = _container; //初始状态
_uploader._file_.style.display = "block"; return _container;
}
}(this); /**
* 异步传输文件
* @param _uoloader 文件上传器
* @private
*/
function _ajax(_uploader) {
var _files = _uploader._file_.files;
//检查文件是否为空
if(_files.length == 0){
alert("请先选择文件!");
return;
} /*for(var i=0;i<_files.length;i++){
console.log(_files[i].name);
}*/ //循环上传文件
for(var i=0; i<_files.length; i++){
var _file = _files[i]; //创建xhr对象
var xhr = new XMLHttpRequest();
var _formData = new FormData();
_formData.append("file", _file); //生成上传进度条
var _progress = document.createElement("progress");
_progress.setAttribute("max", "100");
//生成文字标签
var _label = document.createElement("label");
_label.innerHTML = "正在上传"
//创建容器,并将进度条和标签添加到容器中
var _div = document.createElement("div");
_div.appendChild(_progress);
_div.appendChild(_label);
_div.style.display = "none"; //隐藏容器 _uploader._container_.appendChild(_div); //将容器添加到页面中 //状态变化相应处理
xhr.onreadystatechange = function (_div,_xhr) {
return function () {
//如果正准备上传
if(_xhr.readyState == 1){
_div.style.display = "block";
}
//如果上传完成
else if(_xhr.readyState == 4 && _xhr.status == 200){
_div.getElementsByTagName("label")[0].innerHTML = _xhr.responseText;
}
}
}(_div,xhr);
//上传进度处理
xhr.upload.onprogress = function (_pg) {
return function (event) {
var percentCompleted = Math.round(event.loaded * 100 / event.total);//计算上传百分比
_pg.setAttribute("value", percentCompleted); //显示在进度条上
}
}(_progress); xhr.open("POST", url, true); //打开连接
xhr.send(_formData); //发生文件
}
}
}

项目三、文件上传器v1.1的更多相关文章

  1. HTML5文件上传器,纯脚本无插件的客户端文件上传器---Uploader 文件上传器类

    概述 客户端完全基于JavaScript的 浏览器文件上传器,不需要任何浏览器插件,但需要和jQuery框架协同工作,支持超大文件上传,其算法是将一个超大文件切片成N个数据块依次提交给服务 端处理,由 ...

  2. SpringBoot项目实现文件上传和邮件发送

    前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...

  3. JavaWeb项目实现文件上传动态显示进度

    很久没有更新博客了,这段时间实在的忙的不可开交,项目马上就要上线了,要修补的东西太多了.当我在学习JavaWeb文件上传的时候,我就一直有一个疑问,网站上那些博客的图片是怎么上传的,因为当提交了表单之 ...

  4. jsp---》》》新闻发布系统的项目跟踪+++++++文件上传

    先来一个分层架构图: WeebRoot目录下的页面: 现在,此项目以实现登录,注销,新闻列表,编辑主题>>>> 先来登录部分的关键代码 index.jsp中的代码 userIn ...

  5. web项目的文件上传和 下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用Java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  6. jQuery插件之路(三)——文件上传(支持拖拽上传)

    好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下, ...

  7. VUE项目中文件上传兼容IE9

    项目使用VUE编写,UI是ElementUI,但是Element的Upload组件是不兼容IE9的.因为IE9中无法使用FormData. 查找资料基本有两种解决方法:1.引入JQuery和jQuer ...

  8. web自动化之selenium(三)文件上传

    1.上传标签为input #若上传文件的标签为<input>可以直接定位标签,然后send_keys(文件路径)可以直接上传 2.利用第三方软件Autoit上传 1.下载Autoit:ht ...

  9. qxx项目大文件上传

    1. 在做大文件上传的时候,要注意修改文件的配置,php.ini的配置,还有连接时间.这些东西都记不清了,明天需要问一下芳哥,然后遇到问题的时候就能自己解决了. 2. 然后就遇到一个很尴尬的问题:大文 ...

随机推荐

  1. 学会这些 pycharm 编程小技巧,编程效率提升 10 倍

    PyCharm 是一款非常强大的编写 python 代码的工具.掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧. 一.分屏展示 当你想同时看到多个文件的时候: 1.右击标签页: ...

  2. RabbitMQ入门教程(六):路由选择Routing

    原文:RabbitMQ入门教程(六):路由选择Routing 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  3. ftp安装和虚拟用户创建(终于搞清楚了)

    安装 一.安装 sudo apt-get install vsftpd 二.查看安装结果 安装完毕,检查vsftpd进程是否已启动,可以查看进程或者查看监听端口 ps -eaf|grep vsftpd ...

  4. uoj #450[集训队作业2018]复读机

    传送门 \(d=1\),那么任何时刻都可以\(k\)个复读机的一种,答案为\(k^n\) \(d>1\),可以枚举某个复读机的复读次数(必须是\(d\)的倍数),然后第\(i\)个复读时间为\( ...

  5. $id(id)函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Ant 学习

    到了新公司,发现公司使用ant 来代码生成.本来学习后写下来.在网上找到一篇教程,实在是非常给力... 就把连接记下来吧:http://www.blogjava.net/amigoxie/archiv ...

  7. 2018.09.07 最新cocoapods安装流程

    这篇写在简书了,就不费力气搬了,给简书留一篇. https://www.jianshu.com/p/13bbbf804b71

  8. k8s+docker+proget 镜像制作

    安装proget 1 首先在k8s上运行proget的数据库配置有个注意点:要根据proget官网要求的sql server排序方式建数据库,不然数据保存的时候会报错 2 proget运行起来后,默认 ...

  9. 硬盘安装ubuntu遇到的问题

    终于把这个系统给装上了,陆陆续续弄了4,5天(崩溃...),一直一来都是用U盘来装ubuntu的,挺简单的,但是这个主机识别不了U盘不知道为什么...这个问题又是百度又是Google最终找不到原因只好 ...

  10. linux编译安装mysql5.7

    一.下载源码包 -src cd /usr/local/src/mysql--src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5 ...