.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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值