前端下载文件方法分享

        之前前端下载文件一直不是我弄的,但是最近发现一个需求要下载word文档和excel表格,之前是下载pdf和图片,之前的方法有点不适用。今天就来分享一些下载文件的方法。

一、a标签下载

这里的οnclick="return false"是取消a标签的跳转功能

<a href="下载的链接" download="下载的文件名" onclick="return false">点击下载</a>

二、form表单下载

	function downloadFile(downloadUrl, fileName) {
            // 创建表单
            const formObj = document.createElement('form');
            formObj.action = `${downloadUrl}`;
            formObj.method = 'get';
            formObj.target = 'frameName'
            formObj.style.display = 'none';
            // 创建input,主要是起传参作用,这里的是为了额外传参用的
            const formItem = document.createElement('input');
            formItem.value = fileName; // 传参的值
            formItem.name = 'fileName'; // 传参的字段名
            // 插入到网页中
            document.body.appendChild(formItem);
            document.body.appendChild(formObj);
            formObj.submit(); // 发送请求
            document.body.removeChild(formObj); // 发送完清除掉
        }

三、window.open下载

window.open('下载的地址')
location.href('下载的地址')

这两种方法下载实际上和a标签一样

四、canvas和Image对象下载

function downloadImages(imgsrc) {//下载图片地址
    var image = new Image();
    // 解决跨域 Canvas 污染问题,
    image.setAttribute("crossorigin", "anonymous");
    //图片加载执行这个函数
    image.onload = function() {
    	//创建canvas
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        var context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        var url = canvas.toDataURL("image/png"); //将图片格式转为base64
        var a = document.createElement("a"); // 生成一个a元素
        var event = new MouseEvent("click"); // 创建一个单击事件
        a.download = '图片'+ Date.now(); // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
    };
    image.src = imgsrc + '?time=' + Date.now();  //注意,这里是灵魂,否则依旧会产生跨域问题

}

五、fetch和blob对象下载

function downloadIamge(imgSrc) {
    let imgUrl = imgSrc;// 图片链接
    let a = document.createElement('a');
    let now =Date.now();
    // console.log(now);
    // 这里是将url转成blob地址,
    fetch(imgUrl,{
        mode:'cors'
    })  // 跨域时会报错
        .then(res => res.blob())
        .then(blob => { // 将链接地址字符内容转变成blob地址
            a.href = URL.createObjectURL(blob);
            a.download ='名字'+ now; // 下载文件的名字
            document.body.appendChild(a);
            a.click();
            //在资源下载完成后 清除 占用的缓存资源
            window.URL.revokeObjectURL(a.href);
            document.body.removeChild(a);
        })
}

六、xhr对象和blob下载

//运行时调用downfile2函数就行第一个参数是下载的地址,第二个是文件名
function downfile2(url, name2) {
            let filename2 = url;
            let fileUrl = `/down?url=${filename2}`;
            let houzhui = getExtension(filename2);
            //获取下载文件的后缀
            function getExtension(name) {
                return name.substring(name.lastIndexOf("."))
            }
            this.getBlob(fileUrl).then(blob => {
                // saveas(fig,filename) 将 fig 指定的图窗或 Simulink 模块图保存到 filename 文件中。将文件名指定为字符向量或字符串,包括文件扩展名,例如 'myplot.jpg'。文件扩展名用于定义文件格式
                this.saveAs(blob, `${name2}${houzhui}`);
            })
        }
        // 第一步,要先通过当前url 取得 blob 对象(必须)
        function getBlob(url) {
            return new Promise(resolve => {
                // axios 中的 axios.get()、axios.post()、axios() 方法,都是基于 XMLHttpRequest(简称:XHR) 封装
                const xhr = new XMLHttpRequest()
                /*  调用 open 并不会真正发送请求,而只是做好发送请求的准备工作*/
                xhr.open('GET', url, true)
                xhr.responseType = 'blob'
                // 监听 load 事件,发送完如果成功将得到的对象传给saveAs
                xhr.onload = () => {
                    if (xhr.status === 200) {
                        resolve(xhr.response)// 转为blob 请求类型类型
                    }
                }
                //调用 send() 正式发送请求
                xhr.send()
            })
        }
        function saveAs(blob, filename) {
            var link = document.createElement('a')// 创建a标签
            link.href = window.URL.createObjectURL(blob)// 获取blob 下载url
            link.download = filename//自定义文件名
            link.click();// 点击下载
        }

总结

          这些就是一些下载文件的方法,不过a标签和form表单在实践中不能下载多个文件,比如form表单下载时发送两个请求,之后发现只发送了一个请求,具体原因现在还不太确定,等研究一下在分享,或者那位大佬评论一下,大家互相学习。

web前端开发文档规范是指为了促进团队的工作效率和开发质量,以及方便后续维护和协作的需求,制定的一套文档编写与管理规范。以下是可以下载web前端开发文档规范的步骤和方法。 首先,可以通过互联网搜索相关的文档规范模板,如HTML、CSS、JavaScript等各种规范文档模板。可以在一些知名社区或技术论坛上找到一些优秀的前端开发文档规范模板,例如GitHub、博客园、掘金等。可以通过搜索引擎输入关键词,如“前端开发文档规范模板”来获取相关资源下载。 其次,一些知名的前端开发社区和网站也会提供完整的前端开发文档规范,并提供下载链接。例如MDN(Mozilla Developer Network)等网站提供了详细的HTML、CSS和JavaScript等的文档规范。这些规范是由专业的前端开发者和权威机构制定的,可以作为参考下载和学习。 另外,还可以通过加入一些前端开发相关的社群、群组和论坛,与其他前端开发者进行交流和分享。在这些社群中,一些经验丰富的前端开发者可能会分享他们自己制定的规范文档,这些文档更加贴近实际工作,具有很高的参考价值。可以与他们取得联系,互相交流和学习。 需要强调的是,无论下载哪种类型的前端开发文档规范,都要根据实际项目需求进行适当的调整和修改。每个项目都有自己的特点和需求,所以需要将规范文档与实际项目需求相结合,制定出符合实际情况的文档规范。通过下载和使用规范文档,能够提高前端开发的效率和质量,同时也方便日后的维护和协作工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值