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

.net6,C#语法excel、zip文件下载

后端

  1. excel下载

            IWorkbook workbook = new XSSFWorkbook();
            using (var memoryStream = new MemoryStream())
			{
			    workbook.Write(memoryStream);
			    var byteArray = memoryStream.ToArray();
			    return Convert.ToBase64String(byteArray);
			}
  1. zip下载
//导出到本地
IWorkbook workbook = new XSSFWorkbook();
            Dictionary<string, string> dictFile = new Dictionary<string, string>();
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "down_temp", "Zip");
if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
string filePath = Path.Combine(folderPath, $"{Guid.NewGuid().ToString("N")}.xlsx");
using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
    workbook.Write(fs);
}
dictFile.Add("视图.xlsx", filePath);

/// <summary>
/// 压缩文件
/// </summary>
/// <param name="dictFile"></param>
/// <returns></returns>
public MemoryStream ExportMultipleExcelAndCompress(Dictionary<string, string> dictFile)
{
    var compressedStream = new MemoryStream();

    using (var zipArchive = new ZipArchive(compressedStream, ZipArchiveMode.Create, true))
    {
        foreach (var fileInfo in dictFile)
        {
            AddWorkbookToZip(fileInfo.Value, zipArchive, fileInfo.Key);
        }
    }

    // 重置内存流的位置
    compressedStream.Seek(0, SeekOrigin.Begin);

    // 返回压缩文件的内存流
    return compressedStream;
}

private void AddWorkbookToZip(string filePath, ZipArchive zipArchive, string entryName)
{
    var zipEntry = zipArchive.CreateEntry(entryName);

    using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    using (var entryStream = zipEntry.Open())
    {
        fileStream.CopyTo(entryStream);
    }
}

try
{
    using (MemoryStream compressedStream = ExportMultipleExcelAndCompress(dictFile))
    {
        // 将压缩文件流转换为Base64字符串
        using (var memoryStream = new MemoryStream())
        {
            compressedStream.CopyTo(memoryStream);
            result.File = Convert.ToBase64String(memoryStream.ToArray());
        }
    }
}
finally
{
    foreach (var fileInfo in dictFile)
    {
        //删除文件
        File.Delete(fileInfo.Value);
    }
}

前端

			// 判断文件类型:0为导出zip压缩文件,1为导出excel
            // 将 base64 字符串转换为二进制数据
			let file = '';
			let fileType = 0;
            const byteCharacters = atob(file);
            const byteNumbers = new Array(byteCharacters.length);
            for (let i = 0; i < byteCharacters.length; i++) {
                byteNumbers[i] = byteCharacters.charCodeAt(i);
            }
            const byteArray = new Uint8Array(byteNumbers);

            // 根据 FileType 判断文件类型
            let blob;
            let fileName;
            if (fileType === 0) {
                // 导出 zip 压缩文件
                blob = new Blob([byteArray], { type: 'application/zip' });
                fileName = "下载.zip";
            } else if (fileType === 1) {
                // 导出 excel 文件
                blob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
                fileName = "下载.xlsx";
            } else {
                console.error('未知的文件类型');
                return;
            }

            // 创建一个 URL 对象
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.target = '_blank';
            a.download = fileName; // 设置下载文件名
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);

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

相关文章:

  • `asyncio.wait` 和 `asyncio.gather` 的区别
  • 如何使用 Chrome 无痕浏览模式访问网站?
  • 信息安全实验--密码学实验工具:CrypTool
  • 攻防世界GFSJ1193 cat_theory
  • AI 大模型在软件开发中的变革性影响及应用前景
  • 【Leecode】Leecode刷题之路第62天之不同路径
  • 无人机飞手人才培养技术方案详解
  • 使用Python编写Windows系统服务管理脚本,主要用于管理mysql、postgresql等服务
  • R包开发时Imports和Suggests区分
  • 如何正确的检索一个研究领域的文献?以PubMed数据库为例
  • 基于Dell Idrac7的服务器硬件监控指标解读
  • 排序算法--堆排序【图文详解】
  • Day1 生信新手笔记
  • leetcode:222完全二叉树的节点个数
  • mysql的一次优化,同版本mysql服务器上的运行速度比本地慢很多
  • Github 2024-11-30 Rust开源项目日报 Top10
  • AWS账户注册未完成会收费吗?
  • 【JavaScript】同步异步详解
  • 阿里云服务器(centos7.6)部署前后端分离项目(MAC环境)
  • 七天掌握SQL——第六天:数据库性能优化与监控
  • java 接口防抖
  • SpringBoot 新冠密接者跟踪系统:校园疫情防控的智能守护者
  • 使用 pycharm 新建使用 conda 虚拟 python 环境的工程
  • 【JAVA】反射和注解
  • 设计模式----迭代器模式
  • 项目学习:仿b站的视频网站项目06 -视频分类01