热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

导入excel时,前端传加密文件流,后端拿到后生成excel

导入excel时,前端传加密文件流,后端拿到后生成excel,Go语言社区,Golang程序员人脉社

本文只有部分方法

一、概述

两种方式:
1.前端使用组件传递FileItem对象给后端

2.前端传递文件流给后端(本文使用的)
在这里插入图片描述
两种方式都是,浏览器(前端)点击导入按钮,弹出文件选择框,点击文件选择打开,此时前端拿到该文件的文件流(或者fileItem对象),作为参数传递给后端。
后端拿到参数,以字符串分割的方式或者fileItem类里面的方法,拿到后端需要的文件流以及文件名。

二、后端

先拿到前端传递的fileStream参数,用split将参数分割为,名称和文件流

//将得到的字符串以逗号分割去掉无用信息,第一个是文件名称,第二个是经过base64加密的文件流:fileStream2
        String[] split = fileStream.split(",");
        String fileName = split[0];
        String fileStream2 = split[2];

使用第二种方式:传递加密前端文件流时,需要先在本地生成文件,在解析拿到后端的文件流,进行录入操作
注:前端和后端的文件流不同

//定义生成文件的名称
        String randomFileName = RandomStringUtils.randomNumeric(3)+System.currentTimeMillis();
        //文件路径为本地桌面
        String filePath = getPath()+"\"+randomFileName+".xls";
        //调用generateExcel方法,根据fileStream2文件流和生成路径filePath,生成文件
        InputStream inputStream = null;
        try {
            //将前端传的流,和指定的文件地址,在filePath位置生成文件
            generateExcel(fileStream2,filePath);
            inputStream = new FileInputStream(new File(filePath));
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            throw new StatusException(Messages.getString("systemMsg.noShareFile"));
        }

        Workbook wk = null;
        FileOutputStream fout = null;
        try {
            //判断excel的版本是2003还是2007,还是不是excel
			if (ExcelUtil.isExcel2003(fileName)) {
				wk = new HSSFWorkbook(inputStream);
			} else if (ExcelUtil.isExcel2007(fileName)){
				wk = new XSSFWorkbook(inputStream);
			}
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            throw new StatusException(Messages.getString("systemMsg.noShareFile"));
        }

拿到前端的base64加密的文件流,自己指定生成文件位置

/**
     * Base64解码并生成excel文件
     * @param fileStr  文件base64
     * @param filePath 输出路径
     */
    public static void generateExcel(String fileStr, String filePath) throws Exception {
        Log log = LogFactory.getLog(ImportOrg.class);
        byte[] bytes;
        OutputStream out = null;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
        // 解码并处理数据
            bytes = decoder.decodeBuffer(fileStr);
            for (int i = 0; i 
三、前端

            
// 导入功能
    inclusionFile(upfile) {
      var that = this;
      const file = upfile.target.files[0];
      const reader = new FileReader();
      // 读取文件内容,以base64格式返回结果
      const fileData = reader.readAsDataURL(file);
      console.log(file);
      if (this.isExcel(file.name)) {
        reader.Onload= async () => {
          this.fileData = reader.result;
          let respOnse= await that.$http.upload.uploadFile({
            fileStream: `${file.name},${this.fileData}`,
          });
          if (response) {
            //  console.log(that.csstree)
            that.csstree.find("sOrgtree").init();
            that.query();
            response.result == "0"
              ? $css.tip(response.msg)
              : $css.confirm(response.msg);
          }
         
        };
      } else {
        this.$dialog.alert("文件格式不正确!");
      }
    },

推荐阅读
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 自定义包裹组件的HTML标签:实现商品数量动态增减功能 [Keep Coding]
    在本文中,我们将探讨如何通过自定义包裹组件的HTML标签来实现商品数量的动态增减功能。具体来说,我们将详细介绍如何利用React或Vue等前端框架,结合JavaScript和CSS,实现这一功能。文章将涵盖从基础的HTML结构搭建到事件处理和状态管理的全过程,帮助开发者快速掌握实现方法。此外,我们还将提供一些最佳实践和常见问题的解决方案,以确保开发过程顺利进行。 ... [详细]
  • 本文介绍了一种基于最大匹配算法的简易分词程序的设计与实现。该程序通过引入哈希集合存储词典,利用前向最大匹配方法对输入文本进行高效分词处理,具有较高的准确率和较快的处理速度,适用于中文文本的快速分词需求。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • Java新手求助:如何优雅地向心仪女生索要QQ联系方式(附代码示例与技巧)
    在端午节后的闲暇时光中,我无意间在技术社区里发现了一篇关于如何巧妙地向心仪女生索取QQ联系方式的文章,顿时感到精神焕发。这篇文章详细介绍了源自《啊哈!算法》的方法,不仅图文并茂,还提供了实用的代码示例和技巧,非常适合 Java 新手学习和参考。 ... [详细]
  • 深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略
    深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略 ... [详细]
  • 在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 在使用群报数小程序进行高效接龙与统计时,可以通过创建 `LinkedList` 对象并利用 `for` 循环生成指定数量的 `Person` 对象,为每个人员分配唯一的编号,并将其添加到 `LinkedList` 集合中。这一过程确保了数据的有序性和高效管理,便于后续的接龙和统计操作。此外,该小程序还支持实时更新和查看参与人员的状态,进一步提升了活动组织的便利性和准确性。 ... [详细]
  • Java 中优先级队列的轮询方法详解与应用 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 如何构建和部署C# Windows服务应用程序
    本文介绍了如何从零开始构建和部署C# Windows服务应用程序。通过详细步骤和代码示例,帮助读者掌握创建、配置和部署Windows服务的关键技术点,适合初学者和有经验的开发人员参考。 ... [详细]
author-avatar
行者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有