原生js使用input实现文件上传

Posted 涼皮Herr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生js使用input实现文件上传相关的知识,希望对你有一定的参考价值。

通常原生的input上传是先进行文件的选择,然后通过提交按钮对文件进行上传,现功能需求是选择文件后直接进行上传,通过后端返回的文件信息进行展示,在提交操作时不再进行文件的上传,只传递文件相关信息如id或者url。

文件上传-带进度条:https:////www.cnblogs.com/liangpi/p/12531429.html

效果展示:

1、html中 使用自己的按钮遮挡原生input的样式,可根据自己需求进行调整

<div class="fileBtn" >
   <input type="file" id="uploadfile">
   <button type="button" class="btn btn-primary btn-sm btn-flie">上传附件</button>
</div>
<div class="info-item" id="fileList">
   <!-- <div class="files-info">
        <p>文件1.pdf</p>
        <p class="filedown checkIcon"><img src="images/check.png" alt=""></p>
        <p class="filedown downIcon"><img src="images/down.png" alt=""></p>
        <p class="filedown deleteIcon"><img src="images/del.png" alt=""></p>
      </div> -->
</div>

2、css样式

.fileBtn {
    position:relative;
}
.fileBtn #uploadfile {
    width: 120px;
    height: 30px;
    filter: Alpha(opacity=0);
    -moz-opacity:0;
    opacity: 0;
    position: absolute;
    z-index: 2;
}
.fileBtn .btn-flie {
    width: 120px;
    height: 30px;
    /* cursor: pointer */
     position: absolute; 
     z-index: 1;
}
.info-item {
    margin-top: 35px;
}

3、js相关代码

var fileList = [] // 文件list
$(\'#uploadfile\').change(function(){
    var fileItem = $(\'#uploadfile\')[0].files[0]
    var formData = new FormData();
        formData.append(\'file\', fileItem)
        formData.append(\'type\', \'1\')
    $.ajax ({
        type : "post",
        url : contextPath + "/user/upload",
        data : formData,
        async : true,
        cache : false,
        contentType : false,
        processData : false,
        dataType : \'json\',
        success : function (data) {
            if (data.code == 2000){
                var dataInfo = data.data
                if(dataInfo) { 
                    fileList.push(dataInfo)
                    showFile()
                }
            } else{
                alert(data.message);
            }
        }
    });
});
function showFile() {
    var fileItem = fileList
    if(fileItem.length){
        var str = \'\'
        for(var i = 0; i < fileItem.length; i++){
            str += \'<div class="files-info"><p>\';
            str +=  fileItem[i].name
            str += \'</p>\'
            /*str += \'<p class="fileIcon checkIcon"><img src="images/check.png" alt=""></p>\'
            str += \'<p class="fileIcon down"><img src="images/down.png" alt=""></p>\'*/
            str += \'<p class="fileIcon delete"><img src="images/del.png" alt="" onclick=delFileItem(\'
            str += `\\\'`;
            str += i;
            str += `\\\'`;    
            str += \')></p>\';
            str += \'</div>\';
        }
        $(\'#fileList\').html(str)
    } else {
        $(\'#fileList\').remove()
    }
}
function delFileItem(i){
    fileList.splice(i, 1)
    showFile()
}

 

以上是关于原生js使用input实现文件上传的主要内容,如果未能解决你的问题,请参考以下文章

使用jquery.form.js实现文件上传及进度条前端代码

JQuery 之 ajax上传文件 与 原生ajax 上传文件

js 实现 input type="file" 文件上传示例代码

原生js实现文件上传

原生JS实现大文件分片

Js实现input上传图片并显示缩略图