通过js来获取文件的方式,记录两种方法:
第一种,通过input获取:
html:

<input type="file" id="files" multiple="multiple" >

其中multiple表示可以同时选中多文件
JS:

<script>
window.onload=function(){
    var getFile =document.getElementById("files");
    getFile.onchange=function(e){
        //获取到文件以后就会返回一个对象,通过这个对象即可获取文件
        console.log(e.currentTarget.files);//所有文件,返回的是一个数组
        console.log(e.currentTarget.files[0].name)//文件名
    }
}
</script>

解释:给input 注册一个onchange方法,当点击input的时候就会调用这个方法,选择文件以后就会返回一个对象,通过e.currentTarget.files就可以获取到选择的文件,该files是一个数组,里面保存着文件数据,如果是一个文件,则通过e.currentTarget.files[0]来获取即可,如果是多个文件,则遍历该数组即可。备注:如果input没有配置multiple属性,则只能选择一个文件。

第二种方法:拖拽文件的方式
通过拖拽的方式获取文件,主要调用了ondragover、ondragenter、ondragleave 、ondrop这四个事件,其中最后是在ondrop这个事件中获取文件,除此之外,要设置保存文件的方式为copy,不然获取回来的文件会是0字节的。

放一个div用来作为获取文件的区域,也可以直接用body
html:

<div id="container" class="content" style="width: 600px;height: 600px;margin: 100px  auto;background-color: darkred">

</div>

JS:

<script type="text/javascript">
    window.onload=function (ev) {
        var container = document.getElementById("container");
        container.ondragenter=function () {

        }
        container.ondragover=function (e) {
            //关闭默认事件
            e.stopPropagation();
            e.preventDefault();
            //设置获取模式,为复制
            e.dataTransfer.dropEffect = 'copy';
        }
        container.ondragleave =function () {

        }
        container.ondrop=function (e) {
            e.stopPropagation();
            e.preventDefault();
            var file = e.dataTransfer.files;
            var file_name = file[0].name;
            console.log(file_name);
        }
    }

</script>

e.stopPropagation();、e.preventDefault();这两个方法主要是用来取消默认事件的,不然浏览器则会认为是默认事件,把拖进来的文件交给浏览器处理。
最后在ondrop方法中,通过e.dataTransfer.files,方式获取拖进来 的文件,files和前面的一样,也是一个数组,获取方式和上边input 的方式一样,遍历数组即可。e.dataTransfer.dropEffect = ‘copy’;该方法是设置文件保存的方式为复制。