/**
* 自定义文件上传工具 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. PythonError解决方案

    # Pip Error pip install * error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visua ...

  2. java 工具类使用

    BigDecimalUtil 金额计算工具类 import java.math.BigDecimal; public class BigDecimalUtil { private BigDecimal ...

  3. golang中如何阻塞等待所有goroutines都完成

    有一天,一个人问了我此问题,回头仔细翻阅了一下资料,仔细的想了一下,这个问题的解决有两种方案.方案一:也是推荐方案,也是官方推荐方案,涉及到一个写并发经常关注的模块sync模块,利用里面的sync.W ...

  4. 8.jQuery之上下滑动效果

    上下滑动:slideDown   slideUp  slideToggle <style> div { width: 150px; height: 300px; background-co ...

  5. 利用wampserve搭建本服务器

    1.官网下载安装包 注意:3.0.6版本需要下载依赖包vc依赖包 2.默认为英文 右击图标进入langue设置为中文 3.需要手动设置在现状态 右击=>选中wampsetting =>me ...

  6. java数据结构03

    1.求二叉树的深度 https://www.cnblogs.com/xudong-bupt/p/4036190.html class TreeNode { char val; TreeNode lef ...

  7. Tensorrt之tf-trt

    使用python接口, 另外一种方式就是使用tf-trt,优化后的模型还是pb.优化的过程主要是一些层的合并啊之类的,加速结果不是特别明显,测了两个网络, 加速了10%的样子.优化后仍是pb,因此可以 ...

  8. Redis在centos上面的安装

    一.安装redis 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz [root@iZwz991stxd ...

  9. squid之------基础知识

    squid是什么? 缓存服务器,即用来存储(内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常 ...

  10. 浅谈MySQL存储引擎选择 InnoDB还是MyISAM

    如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用In ...