/// <summary>
/// 下载文件
/// </summary>
/// <param name="dt">需要处理的数据集</param>
/// <param name="imgUrl">文件在数据库里的名称</param>
/// <param name="zipFileName">导出的zip压缩包名称</param>
public static void FileDownload(DataTable dt, string imgUrl, string zipFileName)
{
List<string> tmpStr = new List<string>();
if (dt.Rows.Count > )
{
tmpStr.AddRange(from DataRow dr in dt.Rows select dr[imgUrl].ToString());
}
if (tmpStr.ToArray().Length > )
{
using (ZipOutputStream s = new ZipOutputStream(File.Create(HttpContext.Current.Server.MapPath("") + "\\uploaded\\" + zipFileName)))
{
s.SetLevel(); //设置压缩等级,等级越高压缩效果越明显,但占用CPU也会更多
foreach (string t in tmpStr)
{
string fileName = HttpContext.Current.Server.MapPath("") + "/uploaded/req/" + t;
using (FileStream fs = File.OpenRead(fileName))
{
byte[] buffer = new byte[ * ]; //缓冲区,每次操作大小
if (!string.IsNullOrEmpty(fileName))
{
ZipEntry entry = new ZipEntry(Path.GetFileName(fileName));
s.PutNextEntry(entry);
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, , buffer.Length); //读取文件内容(1次读4M,写4M)
s.Write(buffer, , sourceBytes); //将文件内容写入压缩相应的文件
} while (sourceBytes > );
}
}
}
s.CloseEntry();
}
var fName = HttpContext.Current.Server.MapPath("") + "\\uploaded\\" + zipFileName; if (!string.IsNullOrEmpty(fName))
{
FileInfo downloadFile = new FileInfo(fName);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
zipFileName = HttpUtility.UrlEncode(zipFileName, Encoding.UTF8);
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + zipFileName);
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("shift-jis");
HttpContext.Current.Response.AppendHeader("Content-Length", downloadFile.Length.ToString());
HttpContext.Current.Response.WriteFile(fName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
HttpContext.Current.Response.End();
}
if (File.Exists(fName))
{
File.Delete(fName);
}
}
}

链接:https://pan.baidu.com/s/1q8j5GUzAWUG1DY0DgkgCgg 密码:b2ru

打包下载zip代码的更多相关文章

  1. 使用PHP自带zlib函数 几行代码实现PHP文件打包下载zip

    <?php //获取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir ...

  2. 几行代码轻松实现PHP文件打包下载zip

    <?php //获取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir ...

  3. Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /* * 另存为 */ @RequestMapping(" ...

  4. 【Java】Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /*      * 另存为      */     @Request ...

  5. ASP.NET五步打包下载Zip文件

    本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...

  6. PHP 多文件打包下载 zip

    <?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...

  7. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  8. js证书批量生成与打包下载

    前边有提到最近的一个证书生成保存下载打印的需求. 之前实现的是一个单个操作的页面,现在把实现的批量效果和进度效果的代码展示出来. html <button class="btn btn ...

  9. php打包下载以及断点续传

    php下载单文件 以及 多文件打包下载,支持断点续传 断点续传的功能未经验证 需要nginx或者apache服务器指定静态文件,png, mp4, zip等后缀文件的目录, 直接实例化并调用 down ...

随机推荐

  1. fetch封装

    import {fetch as fetchPro} from "whatwg-fetch" import qs from "qs" const get=(ur ...

  2. 【CF1110E】 Magic Stones - 差分

    题面 Grigory has n n magic stones, conveniently numbered from \(1\) to \(n\). The charge of the \(i\)- ...

  3. unity探索者之socket传输protobuf字节流(一)

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6974229.html 近期在做一个棋牌项目,需要用到socket传输protobu ...

  4. 3.MongoDB恢复探究:为什么oplogReplay参数只设置了日志应用结束时间oplogLimit,而没有设置开始时间?

    (一)问题 在使用MySQL数据库binlog日志基于时间点恢复数据库时,我们必须要指定binlog的开始位置和结束位置,而在MongoDB里面,如果使用oplog进行恢复,只有oplogLimit参 ...

  5. node.js 模拟自动发送邮件验证码

    node.js 模拟自动发送邮件验证码 引言 正文 1. QQ邮箱设置 2. 安装nodemailer 3.配置信息 4.综合 5.讲解 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号 ...

  6. java如何简单的将一个三位正整数分解成三个数

    public class Leet { public static void main(String[] args) { Scanner scanner = new Scanner(System.in ...

  7. golang学习笔记:Interface类型断言详情

    原文链接:https://www.2cto.com/kf/201712/703563.html 1. 用于判断变量类型 demo如下: switch t := var.(type){ case str ...

  8. client-go workqueue demo

    链接地址:https://github.com/kubernetes/client-go [root@wangjq examples]# tree . ├── create-update-delete ...

  9. 操作系统-I/O(4)I/O控制方式

    I/O控制的方式分为: 程序直接控制方式(最简单的I/O方式)                   •    无条件传送:对简单外设定时(同步)进行数据传送                   •   ...

  10. 【转】Windows10删除文件时却提示文件不存在的解决方案

    Windows10系统使用一段时间后用户都会定期进行删除清理系统垃圾,减少系统盘的容量占用,但在删除的过程中许多用户都有可能遇到无法删除的情况,如下为删除文件时却提示文件不存在的解决方案. 1.新建一 ...