• 将零散文件使用ICSharpCode.SharpZipLib压缩打包后一次性下载


    public static Stream CreateZip(List<string> listPath, int level = 5)
    {
    	MemoryStream mstream = new MemoryStream();
    	using (ZipOutputStream zipstream = new ZipOutputStream(mstream))
    	{
    		zipstream.SetLevel(level);
    		Crc32 crc = new Crc32();
    		foreach (var path in listPath)
    		{
    			FileStream fs = File.Open(path, FileMode.Open);
    			//重置流的位置
    			fs.Position = 0L;
    			byte[] buffer = new byte[fs.Length];
    			fs.Read(buffer, 0, buffer.Length);
    
    			//ZIP文件条目
    			ZipEntry entry = new ZipEntry(Path.GetFileName(path));
    			entry.DateTime = DateTime.Now;
    			entry.Size = fs.Length;
    			fs.Close();
    
    			crc.Reset();
    			crc.Update(buffer);
    			//冗余校验码
    			entry.Crc = crc.Value;
    
    			zipstream.PutNextEntry(entry);
    			zipstream.Write(buffer, 0, buffer.Length);
    		}
    		//ZipOutputStream关闭后不关闭mstream
    		zipstream.IsStreamOwner = false;
    	}
    	//重置流的位置
    	mstream.Position = 0L;
    	return mstream;
    }


    使用流读取并压缩文件。

    zipstream.IsStreamOwner = false;
    必须设置


    在MVC中使用FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)方法可直接下载。

    contentType可使用"application/x-zip-compressed"表示zip文件类型。

  • 相关阅读:
    Git 远程操作详解
    Golang io标准库
    Golang strings标准库
    Go WebSocket 实现
    Golang Gorm零值数据更新小坑
    [Linux] 分区扩容
    即截即贴,推荐一个提升截图对比效率的工具Snipaste
    POI 替换 word 关键字并保留样式
    前端图片压缩与 zip 压缩
    ubuntu20更换内核
  • 原文地址:https://www.cnblogs.com/letnet/p/8525105.html
Copyright © 2020-2023  润新知