JavaScript实现文件下载的超简单两种方式分享

 更新时间:2023年12月08日 16:59:26   作者:张张打怪兽  
这篇文章主要为大家详细介绍了JavaScript实现文件下载的超简单两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

文件下载一般有几种情况

  • 1.url
  • 2.文件流

file-saver库实现文件下载

// 流方式
import { saveAs } from "file-saver";
//content 文件流,xxx.pdf 文件名称
saveAs(content, `xxx.pdf`);
 
// url方式  
import { saveAs } from "file-saver";
const url = 'xxx.jpg'
fetch(url)
.then((response) => response.blob())
.then((blob) => {
  saveAs(blob, `xxx.pdf`);
  })

手写方式

url方式

原理:创建一个a标签,传入url点一下a标签就可以下载了

流方式

​​​​​​​原理:将流转换成缓存的url,再创建一个a标签传入url,点一下就实现了

【工具类】文件下载类

 
//utils/downloadFile
class DownloadFile {
    /**
     * 
     * @param {*} file 文件流
     * @returns 
     */
    getObjectURL(file) {
        let url = null;
        if (window.createObjectURL !== undefined) {
            // basic
            url = window.createObjectURL(file);
        } else if (window.webkitURL !== undefined) {
            // webkit or chrome
            try {
                url = window.URL.createObjectURL(file);
            } catch (error) {
                console.log(error);
            }
        } else if (window.URL !== undefined) {
            // mozilla(firefox)
            try {
                url = window.URL.createObjectURL(file);
            } catch (error) {
                console.log(error);
            }
        }
        return url;
    }
    /**
     * 文件点击下载
     * @param {*} blob 文件流
     * @param {*} fileName 文件名
     */
    downloadFile(blob, fileName) {
        let eleLink = document.createElement("a");
        eleLink.download = fileName;
        eleLink.style.display = "none";
        // 字符内容转变成blob地址
        eleLink.href = this.getObjectURL(blob);
        // 自动触发点击
        document.body.appendChild(eleLink);
        eleLink.click();
        // 然后移除
        document.body.removeChild(eleLink);
    }
 
    /**
   * 获取文件名后缀
   * @param {*} filename 文件名
   * @returns 
   */
    getFileFix(filename) {
        let fix = filename.substring(filename.lastIndexOf("\.") + 1).toLocaleLowerCase();
        return fix;
    }
 
    /**
     * 是否可预览
     * @param {*} filename 文件名
     * @returns true可,false不可
     */
    isPreview(filename) {
        let fix = this.getFileFix(filename)
        switch (fix) {
            case "jpg":
            case "jpge":
            case "png":
            case "pdf":
            case "mp4":
            case "txt": {
                return true
            }
            default: {
                return false
            }
        }
    }
 
    /**
     * 预览文件
     * @param {*} blob 文件流
     */
    preview(blob) {
        return this.getObjectURL(blob);
    }
 
    /**
     * 是服务器流 false 本地流true
     * @param {*} blob 文件流
     */
    static isLocalFile(blob) {
        return blob.raw ? true : false
    }
 
}
 
export default DownloadFile

下载

import DownloadFile from "@/utils/DownloadFile";
let d = new DownloadFile();
// content 文件流【blob】
d.downloadFile(content, "优惠码.zip");

到此这篇关于JavaScript实现文件下载的超简单两种方式分享的文章就介绍到这了,更多相关JavaScript文件下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript仿京东放大镜效果

    JavaScript仿京东放大镜效果

    这篇文章主要为大家详细介绍了JavaScript仿京东放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JavaScript操作表单实例讲解(上)

    JavaScript操作表单实例讲解(上)

    这篇文章主要介绍了JavaScript操作表单实例讲解(上)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JS使用H5实现图片预览功能

    JS使用H5实现图片预览功能

    这篇文章主要为大家详细介绍了JS使用H5实现图片预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 基于JavaScript实现密码框验证信息

    基于JavaScript实现密码框验证信息

    这篇文章主要为大家详细介绍了基于JavaScript实现密码框验证信息,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • window.location不跳转的问题解决方法

    window.location不跳转的问题解决方法

    window.location的跳转失效的情况有没有遇到过啊,这主要是冒泡传递影响了,下面有个不错的解决方法,大家可以参考下
    2014-04-04
  • 前端知识点之Javascript选择输入框confirm用法

    前端知识点之Javascript选择输入框confirm用法

    这篇文章主要介绍了JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家学习或者使用js具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-02-02
  • javascript内置对象Math案例总结分析

    javascript内置对象Math案例总结分析

    今天总结一下javascript 内置对象Math中的函数用法,顺带写一下常见的案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • bootstrap datetimepicker2.3.11时间插件使用

    bootstrap datetimepicker2.3.11时间插件使用

    这篇文章主要为大家详细介绍了bootstrap datetimepicker2.3.11时间插件使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • JS实现霓虹灯文字效果的方法

    JS实现霓虹灯文字效果的方法

    这篇文章主要介绍了JS实现霓虹灯文字效果的方法,涉及javascript遍历字符串及页面样式的动态操作技巧,效果非常炫目华丽,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • ECMAScript中迭代器的深入讲解

    ECMAScript中迭代器的深入讲解

    在ECMAScript 6增加了一个对象,它不是新的语法或新的内置对象,而一种协议( 迭代器协议),所有遵守这个协议的对象,都可以称之为迭代器,这篇文章主要给大家介绍了关于ECMAScript中迭代器的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论