Skip to content

文件上传下载

原生js实现

上传

html

html
<input type="file" id="file">

js

js
    let xhr=null;
    //开始上传
    function sureUpload() {
        // 获取到选择的文件
        const file=document.getElementById('file').files[0],
        // new 一个表单数据对象,用于存放文件数据
        form=new FormData();
        // ajax对象
        xhr=new XMLHttpRequest();
        //设置请求头参数的方式,如果没有可忽略此行代码
        // xhr.setRequestHeader("token", token);

        // 添加文件到表单中
        form.append("file",file);
        // 设置请求方式 路径  是否异步
        xhr.open("post","/file/upload",true);
        
        // 上传完成
        xhr.onload=uploadSuccess;

        // 上传出错
        xhr.onerror=uploadError;

        // 上传中
        xhr.onprogress=process;

        // 发送请求
        xhr.send(form);
    }

    function uploadSuccess(e) {
        console.log(JSON.parse(e.currentTarget.response));
        alert("上传成功");
    }

    function uploadError(err) {
        console.log(err);
        alert("上传失败");
    }

    /**
     * 中断上传 
     **/
    function cnacelUpload() {
        xhr.abort();
    }

    function process(e) {
        // 总量 已发送 否具有可以计算的长度
        let { total, loaded, lengthComputable } = e;
        if(lengthComputable){
            console.log(total,"---",loaded)
        }
    }

下载

js
/**
* 向指定路径发送下载请求
* @param{String} url 请求路径
*/
function downLoadByUrl(url){
        var xhr = new XMLHttpRequest();
        //GET请求,请求路径url,async(是否异步)
        xhr.open('GET', url, true);
        //设置请求头参数的方式,如果没有可忽略此行代码
        // xhr.setRequestHeader("token", token);
        //设置响应类型为 blob
        xhr.responseType = 'blob';
        //关键部分
        xhr.onload = function (e) {
            //如果请求执行完成且成功
            if (this.status == 200) {
                var blob = this.response;
                var filename = "我是文件名.xxx";//如123.xls
                var a = document.createElement('a');

                blob.type = "application/octet-stream";
                //创键临时url对象
                var url = URL.createObjectURL(blob);

                a.href = url;
                a.download=filename;
                // 开始下载
                a.click();
                //释放之前创建的URL对象
                window.URL.revokeObjectURL(url);
            }
        };
        //发送请求
        xhr.send();
}