using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace Lib
{
public class ZipHelper
{
private volatile static ZipHelper _instance = null;
private static readonly object lockHelper = new object();
private ZipHelper() { }
/// <summary>
/// 单例模式, 考虑线程安全,只允许一个线程访问。
/// </summary>
public static ZipHelper Instance
{
get
{
if (_instance == null)
{
lock (lockHelper)
{
if (_instance == null)
_instance = new ZipHelper();
}
}
return _instance;
}
}
/// <summary>
/// 解压ZIP文件
/// </summary>
/// <param name="zipFile"></param>
/// <param name="targetDirectory"></param>
/// <param name="passWord"></param>
/// <param name="overWrite"></param>
public ResultEx UnZip(HttpPostedFileBase file, string targetDirectory, string passWord, bool overWrite = true)
{
try
{
if (Directory.Exists(targetDirectory))
Directory.CreateDirectory(targetDirectory); if (!targetDirectory.EndsWith("\\")) targetDirectory += "\\";
using (ZipInputStream zipFiles = new ZipInputStream(file.InputStream))
{
zipFiles.Password = passWord;
ZipEntry theEntry;
while ((theEntry = zipFiles.GetNextEntry()) != null)
{
string directoryName = string.Empty;
string pathToZip = "";
pathToZip = theEntry.Name; if (pathToZip != "")
directoryName = Path.GetDirectoryName(pathToZip) + "\\";
string fileName = Path.GetFileName(pathToZip);
Directory.CreateDirectory(targetDirectory + directoryName); if (fileName != "")
{
if ((File.Exists(targetDirectory + directoryName + fileName) && overWrite) || (!File.Exists(targetDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = File.Create(targetDirectory + directoryName + fileName))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = zipFiles.Read(data, 0, data.Length);
if (size > 0)
streamWriter.Write(data, 0, size);
else
break;
}
streamWriter.Close();
}
}
} }
}
return ResultEx.Init();
}
catch
{
return ResultEx.Init($"导入失败,当前只能导入ZIP格式请确认格式是否有问题!");
} } /// <summary>
/// 某目录压缩成ZIP压缩文件
/// </summary>
/// <param name="filesPath"></param>
/// <param name="zipFilePath"></param>
public static void CreateZipFile(string filesPath, string zipFilePath)
{
if (!Directory.Exists(filesPath))
{
Console.WriteLine("Cannot find directory '{0}'", filesPath);
return;
}
try
{
string[] filenames = Directory.GetFiles(filesPath);
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
{ s.SetLevel(9); // 压缩级别 0-9
//s.Password = "123"; //Zip压缩文件密码
byte[] buffer = new byte[4096]; //缓冲区大小
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
}
}
catch (Exception ex)
{
Console.WriteLine("Exception during processing {0}", ex);
}
} /// <summary>
/// 选中文件压缩成ZIP文件
/// </summary>
/// <param name="filenames">文件路径集合</param>
/// <param name="zipFilePath">压缩后ZIP路径</param>
/// <returns></returns>
public ResultEx CreateZipFile(List<string> filenames, string zipFilePath,string OutName)
{
if (filenames.Count == 0)
{
return ResultEx.Init(false, "没有找到可以导出的证件");
}
if (!Directory.Exists(zipFilePath))
Directory.CreateDirectory(zipFilePath);
var zipFile = $"{OutName}{ DateTime.Now.ToString("yyyyMMddHHmmss")}.zip";
try
{
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath + zipFile)))
{
s.SetLevel(9); // 压缩级别 0-9
//s.Password = "123"; //Zip压缩文件密码
byte[] buffer = new byte[4096]; //缓冲区大小
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
} return ResultEx.Init(true, "压缩成功", zipFile);
}
catch (Exception ex)
{
return ResultEx.Init(ex);
}
}
}
}
  

C# .net 压缩文件解压上传及文件压缩下载的更多相关文章

  1. Flask保存或解压上传的文件

    import os import uuid import shutil import zipfile from flask import Flask, render_template, request ...

  2. PHP自动解压上传的rar文件

    PHP自动解压上传的rar文件   浏览:383 发布日期:2015/07/20 分类:功能实现 关键字: php函数 php扩展 大家都知道php有个zip类可直接操作zip压缩文件,可是用户有时候 ...

  3. 解压上传的zip文件流和文件

    /** * 解压上传的zip文件流 * @param stream * @param outputDirectory */ public static String unzip(InputStream ...

  4. 文件压缩、解压工具类。文件压缩格式为zip

    package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...

  5. 7.Flask-上传文件和访问上传的文件

     1.1.上传文件和访问上传的文件 upload_file_demo.py from flask import Flask,request,render_template import os from ...

  6. Flask-上传文件和访问上传的文件

     1.1.上传文件和访问上传的文件 upload_file_demo.py from flask import Flask,request,render_template import os from ...

  7. Java解压上传zip或rar文件,并解压遍历文件中的html的路径

    1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSe ...

  8. C#压缩或解压(rar和zip文件)

    /// <summary> /// 解压RAR和ZIP文件(需存在Winrar.exe(只要自己电脑上可以解压或压缩文件就存在Winrar.exe)) /// </summary&g ...

  9. golang tar gzip 压缩,解压(含目录文件)

    tar是用于文件归档,gzip用于压缩.仅仅用tar的话,达不到压缩的目的.我们常见的tar.gz就是用gzip压缩生成的tar归档文件. go实现tar压缩与解压与zip类似,区别在于tar需要使用 ...

  10. golang zip 压缩,解压(含目录文件)

    每天学习一点go src. 今天学习了zip包的简单使用,实现了含目录的压缩与解压. 写了两个方法,实现了压缩.解压. package ziptest import ( "archive/z ...

随机推荐

  1. 出现io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1的原因及解决办法

    错误信息 在使用Netty构建Server服务器的时候,之前用得好好的,最近整理了一下就出现了以下错误: WARN (AbstractChannelHandlerContext.java:294)- ...

  2. 用EwoMail开源版搭建邮箱服务器

    介绍: EwoMail是基于Linux的开源邮件服务器,支持一键搭建,集成了众多优秀稳定的组件,是一个快速部署.简单高效.安全稳定的邮件解决方案,支持电脑和手机的客户端,适合个人或邮箱功能需求少的企业 ...

  3. Fastadmin框架,服务器搭建环境

    FastAdmin 基于ThinkPHP和Bootstrap的极速后台开发框架 https://www.fastadmin.net 安装node.js 1.获取node.js资源 V8.x: curl ...

  4. Qt编写物联网管理平台32-表格数据

    一.前言 用表格来展示采集到的数据,是很多组态系统中最常见的方法,一个表格能够展示的数据特别多,在本系统中,默认做的也是通过表格的形式来展示数据,目前是将所有的设备放在一个表格中,后期可能按照不同控制 ...

  5. 这是我见过最通俗易懂的SVD(奇异值分解)算法介绍

    线性代数是机器学习领域的基础,其中一个最重要的概念是奇异值分解(SVD),本文尽可能简洁的介绍SVD(奇异值分解)算法的基础理解,以及它在现实世界中的应用. SVD是最广泛使用的无监督学习算法之一,它 ...

  6. 即时通讯技术文集(第33期):IM开发综合技术合集(Part6) [共12篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第33 期. [- 1 -] IM开发技术学习:揭秘微信朋友圈这种信息推流背后的系统设计 [链接 ...

  7. Solution -「CTSC 2017」「洛谷 P3772」游戏

    \(\mathscr{Description}\)   有 \(n\) 个随机真值 \(x_{1..n}\), 已知 \(P(x_1=1)=p_1\), 对于 \(2\le i\le n\), \(P ...

  8. Solution -「LOJ #6538」烷基计数 加强版 加强版

    \(\mathscr{Description}\)   Link.   求含 \(n\) 个结点.无标号有根.结点儿子数量不超过 \(3\) 的树的数量.答案模 \(998244353\).   \( ...

  9. CDS标准视图:维护计划 I_MaintenancePlanBasic

    视图名称:维护计划 I_MaintenancePlanBasic 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.compiler.compareFilter: true @Aba ...

  10. mybatis中的数据源和连接池

    1.核心配置文件中配置数据库相关属性 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE con ...