美文网首页
多文件上传

多文件上传

作者: 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