zoukankan      html  css  js  c++  java
  • 项目三、文件上传器v1.1

    /**
     * 自定义文件上传工具 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);    //发生文件
            }
        }
    }
  • 相关阅读:
    CUDA从入门到精通
    [Network] 计算机网络基础知识总结
    第三章 需求工程概论
    jsp学习
    算法——递推算法
    大话设计模式读书笔记--文章汇总
    轻松学SQL Server数据库
    Oracle数据库建表+添加数据练习
    《C#图解教程》 总览
    php发送get、post请求的6种方法简明总结
  • 原文地址:https://www.cnblogs.com/tanhao/p/7446423.html
Copyright © 2011-2022 走看看