美文网首页
多文件上传

多文件上传

作者: 0说 | 来源:发表于2018-11-01 23:43 被阅读0次

    index

             <section id="wrap">
                <h1>图片拖拽上传示范</h1>
                <section class="area">
                    <article id="upload" draggable="true">
                        <span></span>
                        <div class="file">选择图片<form id="form" runat="server" method="post" enctype="multipart/form-data" ><input type="file"  multiple="multiple" id="imges1" name="imges1" class="upimages"/></form></div>
                    </article>
                    <article id="drag">请将图片拖到此区域</article>
                </section>
                <section class="info">
                    <p>已选中<span class="num" id='picLen'>0</span>张图片,共<span class="size" id='picSize'>0</span>MB</p>
                    <article>
                        <div class="file">继续选择<input type="file" id="imges2" name="imges1" class="upimages"/></div>
                        <div class="upload" id='btn'>开始上传</div>
                    </article>
                </section>
                <section class="list">
                    <ul id="oUl">
                    </ul>
                </section>
            </section>
            
    
            <script src="js/js.js" type="text/javascript" charset="utf-8"></script>
    
    

    js

    let aInput = document.querySelectorAll('input');
    let drag = document.querySelector('#drag');
    let oUl = document.querySelector('#oUl');
    let $ = obj=>document.querySelector(obj);
    
    // 文件数组
    let arr = [],
    // 文件大小
        aSize = [],
    // 文件名称
        aTitle = [];
    
    // input选择文件
    aInput.forEach(function (item,index) {
        item.onchange = function () {
            if( this.value ){
                if( this.files.length ){
                    for( let i=0,len=this.files.length;i<len;i++ ){
                        let files = this.files.item(i);
                        arr.push(files);
                        aSize.push(files.size);
                        aTitle.push(files.name);
    
                        readerFile(files);
                    }
                }
                this.value = '';
            }
        }
    })
    
    // 接收拖拽文件
    drag.ondragenter = function () {
        this.innerText = '请释放鼠标';
    }
    drag.ondragover = function (e) {
        e.preventDefault();
        e.stopPropagation();
    }
    drag.ondragleave = function () {
        this.innerText = '请将图片拖拽到此区域';
    }
    drag.ondrop = function (e) {
        e.preventDefault();
        e.stopPropagation();
        for( let i=0,len=e.dataTransfer.files.length;i<len;i++){
            let files = e.dataTransfer.files.item(i);
            console.log(files)
            if(/image/.test(files.type)){
                arr.push(files);
                aSize.push(files.size);
                aTitle.push(files.name);
                readerFile(files);
            }
        }
    }
    
    // 图片预览
    function readerFile(files) {
        // 不推荐用文件读取对象 FileReader 读取 data base64二进制数据 的字符串
        let blob = new Blob([files]);
        let url = window.URL.createObjectURL(blob);
        let li = document.createElement('li');
        li.innerHTML = '<img src="'+url+'" width="100%" height="100%" /><p></p>';
        $('#oUl').appendChild(li);
    
        count();
    }
    
    
    // 计算 图片个数 大小名称
    function count() {
        let aLi = $('#oUl').querySelectorAll('li');
    
        // 图片的个数
        $('#picLen').innerText = arr.length;
        // 图片的总大小
    
        if(!aSize[0]){
            $('#picSize').innerText = 0;
        }else{
            $('#picSize').innerText = (eval(aSize.join('+'))/1024/1024).toFixed(2);
        }
        let aP = $('#oUl').querySelectorAll('p');
        aP.forEach((item,index)=>{
            item.innerHTML = aTitle[index] + '<i></i>';
        })
        del();
    }
    
    // 删除 文件数组 li
    function del() {
        let aLi = $('#oUl').querySelectorAll('li');
        aLi.forEach((item,index)=>{
            item.children[1].children[0].addEventListener('click',function (e) {
                arr.splice(index,1);
                aSize.splice(index,1);
                $('#oUl').removeChild(aLi[index]);
                count();
            })
        })
    }
    
    
    // 点击上传
    $('.upload').addEventListener('click',function (e) {
        let aLi = $('#oUl').querySelectorAll('li');
        console.log( arr )
        if(arr.length){
            arr.forEach((item,index)=>{
                (function (index) {
                    let xhr = new XMLHttpRequest();
                    xhr.onload = function () {
                        $('#drag').innerText = '图片已上传成功';
                        $('#oUl').removeChild(aLi[index]);
                        arr.splice(index,1);
                    }
                    xhr.open('post','./upload.php',true);
                    let data = new FormData();
                    data.append('file',item)
                    xhr.send(data);
                })(index);
            })
        }
    })
    

    相关文章

      网友评论

          本文标题:多文件上传

          本文链接:https://www.haomeiwen.com/subject/ongfxqtx.html