当前位置: 首页 > article >正文

NextJs - ServerAction获取文件并处理Excel

NextJs - ServerAction获取文件并处理Excel

  • 一. 客户端
  • 二. ServerAction 处理

一. 客户端

'use client';
import { uploadExcel } from '@actions/batchInquirySystem/api';
import type { UploadProps } from 'antd';
import { Upload } from 'antd';

/**
 * 创建问询内容
 */
const Page = () => {
    const customRequest = async (option: any) => {
        const file = option.file as File;
        const formData = new FormData();
        formData.append('file', file);
        const response: any = await uploadExcel(formData);
        if (response.error) {
            option.onError(response.error);
        } else {
            option.onSuccess();
        }
    };

    const uploadProps: UploadProps = {
        accept: '.xlsx, .xls',
        customRequest,
        maxCount: 1,
        style: { width: '50vw' },
    };

    return (
        <div>
            <Upload.Dragger {...uploadProps}>上传本地文件</Upload.Dragger>
        </div>
    );
};

export default Page;

二. ServerAction 处理

首先安装xlsx,处理excel文件

npm i xlsx

其次编写ServerAction:

'use server';

import * as XLSX from 'xlsx';

export const uploadExcel = async (formData: FormData) => {
    // 拿到 file
    const file = formData.get('file') as File;
    let data: any[] = [];
    try {
    	// 要拿到对应的buffer流(直接用file是不行的)
        const bytes = await file.arrayBuffer();
        const content = Buffer.from(bytes);
        // 读取文件
        const workbook = XLSX.read(content, { type: 'buffer' });
        // 拿到所有 sheet
        const workSheets = workbook.Sheets;
        // 拿到第一个 sheet 的数据 
        data = XLSX.utils.sheet_to_json(workSheets[workbook.SheetNames[0]]);
    } catch (e) {
        console.error(e);
    }
    // 打印数据
    console.log(data);
    return data;
};


http://www.kler.cn/a/514139.html

相关文章:

  • ABP - 缓存模块(1)
  • 查看电脑或笔记本CPU的核心数方法及CPU详细信息
  • 常用排序算法之插入排序
  • 记一次数据库连接 bug
  • 开源许可证(Open Source Licenses)
  • Docker 学习总结(85)—— docker cp 使用总结
  • K8s master节点初始化失败报错
  • UI样式表(悬停hover状态样式和按下pressed)
  • FPGA 时钟树缓存布局布线
  • Linux C\C++编程-文件位置指针与读写文件数据块
  • HarmonyOS NEXT:华为分享-碰一碰开发分享
  • Linux内核源码目录结构
  • Linux:文件描述符fd、系统调用open
  • 【Unity3D】3D物体摆放、场景优化案例Demo
  • AI 在制造行业的探究
  • 使用 OpenCV 和 Python 轻松实现人脸检测
  • C语言程序设计十大排序—选择排序
  • [unity 高阶]使用ASE制作一个cubed的skybox的shader,跟做版本
  • ChatGPT开发教程指南
  • HTML 元素详解:从入门到精通
  • 数据结构 链表2
  • 深度学习python基础(第二节) 分支语句和循环语句
  • 国家安全部发布《网络安全法》解读
  • 基于单片机的智能台灯设计
  • Spring 6 第6章——单元测试:Junit
  • golang基于gin框架的脚手架开发