前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据

这篇具有很好参考价值的文章主要介绍了前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、通过调用接口下载文件

1.1根据文件流Blob进行下载

const onExport = async () => {
  try {
    let res = await axios.request({
      method: 'POST',
      url: '请求地址',
      responseType: 'blob',
      params: { data: null },
      headers: { Authorization: 'Bearer ' + UserModule.token },//看看请求是否需要token
    });

    let reader = new FileReader();
    let data = res.data;
    reader.onload = (e: any) => {
      try {
        let fileName = window.decodeURI(
          decodeURIComponent(decodeURI(res.headers['content-disposition'].split(`''`)[1]))
        );
        let url = window.URL.createObjectURL(new Blob([data], { type: res.headers['content-type'] }));
        let link = document.createElement('a');
        link.style.display = 'none';
        link.href = url;
        link.setAttribute('download', fileName);
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      } catch (e: any) {
        message.error(e);
      }
    };
    reader.readAsText(data);
  } catch (err) {
    message.error('导出失败');
  }
};

1.2根据下载文件链接直接进行下载

    downloadFile(fileDownloadUrl) {
      const downloadLink = document.createElement("a");
      downloadLink.href = fileDownloadUrl;//文件地址
      // 设置下载文件的名称(可选)
      downloadLink.download = "yourFileName.ext";
      // 将 <a> 元素添加到 DOM 中
      document.body.appendChild(downloadLink);
      // 模拟点击触发下载
      downloadLink.click();
      // 从 DOM 中移除 <a> 元素
      document.body.removeChild(downloadLink);
    }

二、将数组的对象数据导出到.xlsx文件中

  fnExport() {
    let data = [];
    let temp =    [
      {
        name:'小周',
        sex:'男',
        nation:'汉族'
      },
      {
        name:'小林',
        sex:'女',
        nation:'汉族'
      },
    ]
    temp.forEach((item: models.ExpertEditModel) => {
      data.push({
        姓名: item.name,
        性别: item.sex,
        民族: item.nation,
      });
    });
    const ws = XLSX.utils.json_to_sheet(data);
    // 新建book
    const wb = XLSX.utils.book_new();
    // 生成xlsx文件(book,sheet数据,sheet命名)
    XLSX.utils.book_append_sheet(wb, ws, '数据详情');
    // 写文件(book,xlsx文件名称)
    XLSX.writeFile(wb, '基本信息.xlsx');
  }

三、请求接口上传文件给后端

  async beforeAvatarUpload(file: any, fList: any) {
    if (!file) {
      this.$message.error('请先添加文件');
    } else {
      if (file) {
        try {
          const formData = new FormData();
          formData.append('file', file);
          //await api.Organizations.EduUploadSchool_PostAsync(formData);
          // 发起POST请求
			axios.request({
			  method: 'post',
			  url: 'your_backend_url',
			  data: formData,
			  headers: {
			    'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
			    // You might need other headers depending on your backend requirements
			  }
			})
          this.$message.success('上传成功');
        } catch (err) {
          this.$message.error('上传失败:' + err.message);
        }
      }
    }
  }

四、读取用户上传的.xlsx文件内容转成数组

html文章来源地址https://www.toymoban.com/news/detail-653188.html

        <el-upload
            action=""
            accept=".xlsx"
            :before-upload="getExcelFile"
        >
            <el-button size="small" type="primary">点击上传</el-button>
        </el-upload>
        async getExcelFile(file) {
            if (!/\.(xlsx)$/.test(file.name.toLowerCase())) {
                console.log("请上传.xlsx格式的Excel文件");
            } else if (file) {
                try {
                    const res = await this.readExcel(file);//调用解析.xlsx文件方法
                } catch (error) {
                    console.log("上传错误:", error);
                }
            }
        },
        // 解析Excel
        readExcel(file) {
            return new Promise((resolve, reject) => {
                const reader = new FileReader();//创建FileReader对象,您可以将文件内容读取到内存中
                let getExcelList = [];// 用于存储从Excel中提取的数据
                reader.onload = (e) => {
                    try {
                        let data = e.target.result;
                        let workbook = XLSX.read(data, { type: "binary" });
                         // 遍历工作表
                        for (let item in workbook.SheetNames) {
                            let SheetName = workbook.SheetNames[item];
                            let sheetInfos = workbook.Sheets[SheetName];
                            // 将工作表内容转换为JSON格式
                            let excel = XLSX.utils.sheet_to_json(sheetInfos, { raw: true });
                            // 遍历每行数据并将特定字段添加到getExcelList数组中
                            excel.forEach((item) => {
                                getExcelList.push({
                                    name: item.姓名 ?? "",
                                    nation: item.民族 ?? "",
                                    school: item.学校 ?? "",
                                });
                            });
                        }
                        console.log(
                            "%c [ getExcelList ]-53",
                            "font-size:13px; background:pink; color:#bf2c9f;",
                            getExcelList
                        );
                        resolve(getExcelList);// 成功解析并处理Excel文件,返回getExcelList数组
                    } catch (e) {
                        reject(e);
                    }
                };
                // console.log('teacherUploadList', teacherUploadList);
                reader.readAsBinaryString(file);// 以二进制字符串形式读取上传的Excel文件内容,解析成功则调用reader.onload函数
            });
        }

到了这里,关于前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端:使用easyExcel实现解析Excel文件读取数据。前端:Excel模板下载、前端上传文件

            本篇是EasyExcel快速入门知识,讲解如何读取Excel文件,对Excel中错误信息如空字符、必填项为空、表格格式校验做到处理 ,并给出了实际项目中示例代码;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小;

    2024年02月05日
    浏览(75)
  • java实现文件的上传和下载,将文件流转base64返回给前端

    上传代码 文件下载代码 后端通过json拿到文件流的返回,我采用将文件流转成base64返回给前台,实现代码如下:

    2024年02月13日
    浏览(58)
  • 前端通过STS方式直传至阿里云OSS(包含文件上传、下载和自动刷新stsToken)

    最近项目业务需要实现一个资源管理的功能,就简单学习了一下前端怎么使用阿里云OSS。 原本这些事情都是后端实现的,但这样子有许多缺点,比如文件上传需要走两次,先上传到后端,再由后端上传至阿里云OSS,既占用带宽也浪费时间;此外,前端还不能获取到真正的上传

    2024年01月19日
    浏览(68)
  • Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载

    Shell脚本常用命令 简介 1、什么是shell: Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。 2、如何编写shell脚本: 文本编辑器(可以使用

    2024年02月03日
    浏览(71)
  • 【前端面试】中大文件上传/下载:中等文件代理服务器放行+大文件切片传输+并发请求+localstorage实现断点续传

    目录 切片上传~spark-md5 原理:流式计算+分块处理 文件标识spark-md5:A-B A.切片哈希值合并 B.首尾切片+其他切片前中后各取2M 计算hash:A-B(参考React的Fiber架构) A.线程:web-worker B.空闲:requestIdleCallback 异步并发控制:A-B(参考http2的多路复用) A.promise.allSettled() B.并发数max=

    2024年02月12日
    浏览(56)
  • SpringBoot整合hdfs,实现文件上传下载删除与批量删除,以及vue前端发送请求,实现前后端交互功能;

    部分工具类代码参考文章:https://blog.csdn.net/qq_27242695/article/details/119683823 前端实现效果 HDFSController HDFS FileInterface (文件接口) HDFS FileImplService (文件接口实现类) HDFSConfig(从yaml读取文件) HDFSUTils 前端vue代码:

    2024年02月16日
    浏览(84)
  • 前端文件上传的几种交互造轮子

    前端文件上传本来是一个常规交互操作,没什么特殊性可言,但是最近在做文件上传,需要实现截图粘贴上传,去找了下有没有什么好用的组件,网上提供的方法有,但是没找完整的组件来支持cv上传,经过了解发现可以用剪贴板功能让自己的cv实现文件上传,于是自己就整合

    2024年02月11日
    浏览(45)
  • .net6Api后台+VUE3前端实现上传和下载文件全过程

    首先本文参考的是,感谢博主: net6WebApi上传下载文件_cduoa的博客-CSDN博客_webapi下载文件 在博主的基础上,增加了新的功能,代码中有注明,并且使用VUE3前端实现。 后端部分: 1.首先建立IFileService文件 2.建立FileService文件 3.增加FileController文件 4.Program文件中,进行配置和跨域

    2023年04月09日
    浏览(55)
  • 前端下载文件的几种方式使用Blob下载文件

    前端下载文件的几种方式 使用Blob下载文件 在前端下载文件是个很通用的需求,一般后端会提供下载的方式有两种: 1.直接返回文件的 网络地址 (一般用在静态文件上,比如图片以及各种音视频资源等) 2.返回 文件流 (一般用在动态文件上,比如根据前端选择,导出不同的

    2024年02月05日
    浏览(52)
  • 前端下载文件(Blob)的几种方式使用Blob下载文件

    在前端下载文件是个很通用的需求,一般后端会提供下载的方式有两种: 1.直接返回文件的网络地址(一般用在静态文件上,比如图片以及各种音视频资源等) 2.返回文件流(一般用在动态文件上,比如根据前端选择,导出不同的统计结果 excel 等) 第一种方式比较简单,但

    2024年02月07日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包