对读取的Excel文件数据进行拆分并发请求发送到后端服务器

这篇具有很好参考价值的文章主要介绍了对读取的Excel文件数据进行拆分并发请求发送到后端服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,我们先回顾一下文件的读取操作:

本地读取Excel文件并进行数据压缩传递到服务器-CSDN博客

第一步:根据以上博客,我们将原先的handleFile方法,改为以下内容:

const handleFile = async(e) => {
    console.time('test')
    const file = e.target.files[0];
    
    const results = await new Promise((resolve,reject) => {
        Papa.parse(file,{
            header:true,
            skipEmptyLines:true,
            complete:resolve, //成功时的回调
            error:reject //失败时的回调
        })
    })

    const data = results.data;
    console.log(data)

};

先对data数据进行打印,获取到一千多行的数据信息

对读取的Excel文件数据进行拆分并发请求发送到后端服务器,服务器,前端,javascript

那么如何对1000多条信息进行分组处理呢??? 

因为我们要对数据进行拆分,所以我们可以将此数据分成200个记录为一组的分组操作。

第二步:对数据进行分组操作

const batchSize = 200;
const dataChunks = [];
for(let i=0;i<data.length;i+=batchSize){
    const dataChunks = data.slice(i,i + batchSize);
    dataChunks.push(dataChunks);
}

console.log(data,dataChunks)

对读取的Excel文件数据进行拆分并发请求发送到后端服务器,服务器,前端,javascript

第三步:引入eachLimit并对此进行操作

import { eachLimit } from "async"; //引入第三方类库  需要安装

以下的handleFile的全部代码

    const [results,setResults] = useState([]); //保留解析后的数据
    const [progress,setProgress] = useState({completed:0,total:0});
    
    const handleFile = async(e) => {
        console.time('test')
        const file = e.target.files[0];
        
        const results = await new Promise((resolve,reject) => {
            Papa.parse(file,{
                header:true,
                skipEmptyLines:true,
                complete:resolve, //成功时的回调
                error:reject //失败时的回调
            })
        })
 
        const data = results.data;
        console.log(data)

        const batchSize = 200;
        const dataChunks = [];
        for(let i=0;i<data.length;i+=batchSize){
            const dataChunks = data.slice(i,i + batchSize);
            dataChunks.push(dataChunks);
        }

        console.log(data,dataChunks) //输出原先数据以及分组后的数据

        const processData = async(dataChunks) => {
            const totalChunks = dataChunks.length; //总共需要发送的请求次数
            let completedChunks = 0; //已经完成的请求次数
            const resultsArray = []; //保存所有请求的结果

            const notifyProgress = () => {
                setProgress({
                    completed: completedChunks,
                    total: totalChunks,
                })
            }
            await eachLimit(dataChunks,5,async(chunk) => {
                const gzip = pako.gzip(JSON.stringify(chunk),{to:"string"});
                try{
                    const response = await fetch('http://localhost:3000',{
                        method:"POST",
                        body:gzip,
                        headers:{
                            "Content-Type":"application/octet-stream",
                        }
                    });

                    const result = {
                        index:dataChunks.indexOf(chunk),
                        success:response.ok,
                        status:response.status,
                        message:response.statusText,
                    };

                    resultsArray.push(result);
                    completedChunks++;
                    notifyProgress();
                    setResults([...resultsArray]);
                }catch (error){
                    const result = {
                        index:dataChunks.indexOf(chunk),
                        success:false,
                        status:500,
                        message:error.message,
                    };
                    resultsArray.push(result);
                    completedChunks++;
                    notifyProgress();
                    setResults([...resultsArray]);
                }
            });
            console.timeEnd("test")
        }
        await processData(dataChunks);
    };
<input type="file" onChange={handleFile} accept='.csv' />

进度的展示

<h2>进度的展示</h2>
<div>
    Progress: { progress.completed } / { progress.total }
</div>

结果展示

<h2>结果显示</h2>
<ul>
    {results && 
        results.map(result => {
            return <li key={result.index}>
                {result.index} - {result.success.toString()} - {result.status} - {""}
                {result.message}
            </li>
        })
    }
</ul>

此时,我们就可以尝试读取一个文件进行测试

对读取的Excel文件数据进行拆分并发请求发送到后端服务器,服务器,前端,javascript

由此看出,我们的顺序并不是按照顺序来排列的,那是因为我们进行请求的并发处理并不代表一定是按照顺序去进行数据的返回,因为可能在请求中,因为网络的问题先请求的操作可能会成为后返回的操作。

而result也是按照一定的批次进行返回的,而不是一条一条返回。

对读取的Excel文件数据进行拆分并发请求发送到后端服务器,服务器,前端,javascript

此时,我们点击修改背景颜色的按钮,也会很卡顿,所以这种情况需要在后续进行性能优化。

那么以上就是这些内容,希望对您有所帮助。 文章来源地址https://www.toymoban.com/news/detail-817597.html

到了这里,关于对读取的Excel文件数据进行拆分并发请求发送到后端服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

    在pandas读取excel经常会遇到合并单元格的问题。例如: 此时使用pandas读取到的内容为: 如果去百度,几乎所有人会说应该用如下代码: 这样看起来没问题,但是,该解决方案并不能适用于所有场景,甚至会造成数据错误。 例如: 对班级和备注填充后: 孙武空本来是数据缺

    2024年02月03日
    浏览(32)
  • 高并发 发送请求(asyncio)

    在接手这个项目之前,关于数据存储的代码逻辑如上图,看起来按部就班,也很合理。(本人觉得这就像个玩具车) 在最后一步发送HTTP request响应足够快的话,其实速度说不上快但稳定,可以接受。但偏偏第三季度了,数据量上来了,最后一步得到response的时间达到了2秒多(

    2024年02月07日
    浏览(28)
  • winform读取Excel文件中数据内容

    效果  

    2024年02月05日
    浏览(36)
  • Python读取写入数据到Excel文件

    【Linux干货教程】Ubuntu Linux 换源详细教程 大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! Hello,各位看官老爷们好,洲洲已

    2024年02月12日
    浏览(51)
  • 前端使用xlsx插件读取excel文件数据

    使用 xlsx 插件在前端读取Excel文件数据具有以下优点和缺点,适用于以下场景: 简单易用: xlsx 插件提供了简单的API来读取Excel文件数据,无需复杂的配置和依赖。 完整的功能: xlsx 插件支持读取各种Excel文件格式,包括XLS和XLSX等常见格式,可以读取多个工作表和多种数据类

    2024年02月14日
    浏览(42)
  • 区块链学习5-长安链并发测试(3)_发送并发交易请求

    区块链学习4-长安链并发测试(2)_部署链_fvafuc的博客-CSDN博客 参考官方文档: https://docs.chainmaker.org.cn/quickstart/通过命令行体验链.html#cmc 修改cmc的sdk_config.yml,使其连接到指定的一个或多个节点: 参考官方文档: https://docs.chainmaker.org.cn/quickstart/通过命令行体验链.html#id14 ​ ​

    2024年02月02日
    浏览(29)
  • 后端:使用easyExcel实现解析Excel文件读取数据。前端:Excel模板下载、前端上传文件

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

    2024年02月05日
    浏览(53)
  • python读取表格数据将pdf文件转excel文件最新可用方法

    【ptf】 【转换后Excel】 可用看到表格内容位置一致,转换完成 (1)安装camelot库 (2)转换代码

    2024年02月15日
    浏览(31)
  • php使用guzzle http发送并发接口请求

    在 PHP 中, Guzzle 是一个功能强大且流行的 HTTP 客户端,提供了方便的接口来发送 HTTP 请求并处理响应,本人非常喜欢这个包且重度依赖。 以下是使用 Guzzle 发送并发请求的基本示例: 

    2024年01月16日
    浏览(36)
  • Python:使用openpyxl读取Excel文件转为json数据

    openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files 文档 https://openpyxl.readthedocs.io/en/stable/ https://pypi.org/project/openpyxl/ 安装 环境 读取文件示例:将Excel文件读取为json数据 有如下一个文件 data.xlsx 实现代码 输出读取的json数据 读写示例

    2024年02月15日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包