文件上传(单文件)

该文章展示了如何使用JavaScript实现单文件上传功能,特别是图片的本地预览。通过监听文件输入元素的change事件,利用FileReader接口读取文件并转换为Base64显示在img标签中。点击上传按钮后,使用Ajax发送文件到服务器。当上传成功时,清除表单和预览图,并调用函数展示上传文件的列表。
摘要由CSDN通过智能技术生成

简单的单文件上传:
主要是上传图片 本地预览 纯 js 代码逻辑展示,如果上传的不是图片可以 通过 file.type 来判断文件的类型,不是图片的话可以给一个固定的图片作为展示,可自行添加。

后续会有一个多文件上传大文件上传分享。

<body>
    <div>
        单文件上传:
        <input type="file" value="" id="file" accept="image/*" />
        <!-- 本地预览 -->
        <img alt="暂无图片" id="myImg" style="width:100px;">
        <button id="upload">上传</button>
    </div>
    <!-- 预留本地预览 -->
    <div class="lists"></div>
</body>
<script>
    var input = document.querySelector("#file"); //上传的文件
    var upload = document.querySelector("#upload"); //上传按钮
    var myImg = document.querySelector("#myImg"); //本地预览图片
    var lists = document.querySelector(".lists"); //列表展示
	
    //本地预览
    input.onchange = function (e) {
    	var files = input.files ? input.files : [];
        if (!files.length || !window.FileReader) {
            console.log('浏览器不支持 ');
            return false;
        };
        //获取文件对象
        console.log(e.target);
        var file = e.target.files[0];
        var reader = new FileReader(); //是一种异步文件读取
        reader.readAsDataURL(file); //转成base64
        //数据读取完成触发
        reader.onload = function (event) {
            console.log(event); //event.target.result;
            myImg.src = event.target.result;
        }
    };
    //单击上传按钮
    upload.onclick = function () {
    	var files = input.files ? input.files : [];
        //浏览器是否支持 HTML5
        if (!files.length || !window.FileReader) {
            console.log('浏览器不支持 ');
            return false;
        };
        //ajax
        var fd = new FormData(); //通过formData将文件转成二进制数据(流);
        fd.append('file', files[0]);

        var request = new XMLHttpRequest();
        request.open('post', 'http://139.196.42.209:8001/upload/single');
        request.send(fd);
        request.onreadystatechange = function () {
            if (request.readyState == 4 & request.status == 200) {
                alert('上传成功');
                input.value = ''; //清空表单值
                myImg.src = ''; //清空本地预览
                list(); //调用列表展示
            }
        }
    };
    //数据展示
    function list() {
        var request = new XMLHttpRequest();
        request.open('get', 'http://139.196.42.209:8001/upload/list');
        request.send();
        request.onreadystatechange = function () {
            if (request.readyState == 4 & request.status == 200) {
                var response = JSON.parse(request.responseText);
                console.log(response);
                var str = "<ul>";
                response.list.forEach(function (item, i) {
                    str += "<li>" + item + "</li>"
                });
                str += "</ul>";
                lists.innerHTML = str;
            }
        }
    };
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

つ 派小星

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值