代码改变世界

input实现上传

2019-03-21 11:27  孤独大兔子  阅读(7473)  评论(0编辑  收藏  举报

很多时候我们会用到上传,实现一个普通的上传也很简单,不用引用繁琐的插件

一个普通的上传

    <form action="=upload" method="post" enctype="multipart/form-data">
        <input id="file1" name="fileupload" type="file" value="" />
        <input id="" type="submit" value="上传" />
    </form>

From上的属性

action是要上传的地址,要向什么地方发送表单数据,可以是绝对地址,也可以是相对地址。

method是要发送的方式,可以是post,也可以是get。

enctype规定了在发送之前对要发送的数据如何编码,multipart/form-data表示不需要对字符编码,如果是上传,必须用这个属性。

Input上的属性

accept此处没有定义,可以过滤文件上传的类型,如accept="image/gif, image/jpeg",多个用逗号隔开。

multiple如果加入了这个属性,表示可以支持多选,如multiple="multiple"。

---------------------------------------------------以上实现简单的上传就够了---------------------------------------------------------------------

上传后input会有一些属性,可以给我们提供一些便利。

 

    <form action="=upload" method="post" enctype="multipart/form-data">
        <input id="files1" name="fileupload" type="file" value="" onchange="fileChange()" />
        <input id="" type="submit" value="上传" />
    </form>
    var files1 = document.getElementById('files1');
    function fileChange(){
        console.log(files1.files)
    }

 

这里给input添加了一个事件,改变后获取input上的files属性。上传了一个文件后打印结果如下

可以看到,其中files里有一个对象,包含了上传文件的名字、大小以及格式,我们就可以根据这些属性来做一些事情。

如想要获取图片上传的名字,可用files1.files[0].name,大小可以用files[1].files[0].size等。

如果想让上传的图片显示出来,这里提供两种方法:

方法一:直接把名字给一个img的src(图片需要放在同文件夹内)。

<img src="" alt="" id="uploadImg">
<script>
    var files1 = document.getElementById('files1');
    var uploadImg = document.getElementById('uploadImg');
    function fileChange(){
        uploadImg.src = files1.files[0].name;
    }
</script>

方法二:创建一个FileReader对象

<img src="" alt="" id="uploadImg">
<script>
    var files1 = document.getElementById('files1');
    var uploadImg = document.getElementById('uploadImg');
    function fileChange(){
        var reader = new FileReader();
        reader.readAsDataURL(files1.files[0]);
        reader.onload = function () {
          uploadImg.src = this.result;
        }
    }
</script>

如果要实现多文件上传,同理用循环咯,既然有files[0],就有files[1],files[2].....,至于用哪种方法实现都可以。

方法一的例子:

<form action="Upload" method="post" enctype="application/x-www-form-urlencoded" >
    <input onchange="cinput()" id="File1" name="fileupload" accept="image/gif, image/jpeg" multiple="multiple" type="file" value="" />
</form>
<div id="imgList"></div>
<script>var File1 = document.getElementById('File1');
    var imgList = document.getElementById('imgList');
    function cinput() {
        var imgHtml = '';
        for(var i=0; i< File1.files.length; i++){
            var imgHtmlTem = `<img id="img_preview" data-src="" src=${File1.files[i].name} data-holder-rendered="true" style="width: 100px; height:100px;display: block;">`;
            imgHtml+=imgHtmlTem;
        }
        imgList.innerHTML = imgHtml;
    }
</script>

end.