代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Asp.NET
】
实现文件夹及文件压缩,并实现下载(三)——文件超过15
作者:
咏矽
/ 发布于
2017/10/25
/
940
添加引用:ICSharpCode.SharpZipLib.dll 代码: protected void Button1_Click(object sender, EventArgs e) { string filePath = Server.MapPath("files"); string strFileName = HttpUtility.UrlEncode("files").Replace('+', ' '); string fileName = "files.zip";//客户端保存的文件名 string Path = Server.MapPath(fileName);//路径 System.IO.FileStream iStream = null; try { zos = new ZipOutputStream(File.Create(filePath + ".zip"));//创建压缩文件,保存的服务器中 strBaseDir = filePath + "\\"; addZipEntry(strBaseDir);//压缩文件 zos.Finish(); zos.Close(); //分块下载文件 iStream = System.IO.File.OpenRead(Path); System.IO.FileInfo fileInfo = new System.IO.FileInfo(Path); if (fileInfo.Exists == true) { const long ChunkSize = 1048576;//1M 每次读取文件,只读取1M,这样可以缓解服务器的压力 byte[] buffer = new byte[ChunkSize]; Response.Clear(); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName)); while (dataLengthToRead > 0 && Response.IsClientConnected) { int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 Response.OutputStream.Write(buffer, 0, lengthRead); Response.Flush(); dataLengthToRead = dataLengthToRead - lengthRead; } Response.Close(); } zos.Close(); iStream.Close(); Response.End(); Response.Clear(); Response.End(); } catch (Exception ex) { if (iStream != null) iStream.Close(); ////zos.Close(); ScriptManager.RegisterStartupScript(this, GetType(), "alert", "<script>alert('下载有问题!');</script>", false); } } private void addZipEntry(string path) { Crc32 crc = new Crc32(); DirectoryInfo di = new DirectoryInfo(path); FileStream fs = null; try { foreach (DirectoryInfo item in di.GetDirectories()) { addZipEntry(item.FullName); } foreach (FileInfo item in di.GetFiles()) { fs = File.OpenRead(item.FullName); if (fs.Length != 0) { long fileLength = fs.Length; long pai = 1024 * 1024 * 20;//每M写一次 long forint = fs.Length / pai + 1; byte[] buffer = null; ZipEntry entry = null; if (fileLength < 104857600)//150 * 1024 * 1024 { buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string strEntryName = item.FullName.Replace(strBaseDir, ""); entry = new ZipEntry(strEntryName); zos.PutNextEntry(entry); zos.Write(buffer, 0, buffer.Length); } else { entry = new ZipEntry(item.FullName.Replace(strBaseDir, "")); entry.Size = fs.Length; entry.DateTime = DateTime.Now; zos.PutNextEntry(entry); for (long i = 1; i <= forint; i++) { if (pai * i < fs.Length) { buffer = new byte[pai]; fs.Seek(pai * (i - 1), System.IO.SeekOrigin.Begin); } else { if (fs.Length < pai) { buffer = new byte[fs.Length]; } else { buffer = new byte[fs.Length - pai * (i - 1)]; fs.Seek(pai * (i - 1), System.IO.SeekOrigin.Begin); } } fs.Read(buffer, 0, buffer.Length); crc.Reset(); crc.Update(buffer); zos.Write(buffer, 0, buffer.Length); zos.Flush(); } } } fs.Close(); } } catch (Exception ex) { if (fs != null) fs.Close(); ScriptManager.RegisterStartupScript(this, GetType(), "alert", "<script>alert('压缩有问题!');</script>", false); } } 这个方法先是将生成的压缩包存放到服务器中,然后再下载
试试其它关键字
同语言下
.
gzip压缩
.
实现http多线程断点续传下载文件
.
实现多线程断点续传下载大文件
.
生成字符串的 CheckSum
.
根据 UserAgent 获取浏览器的类型和版本
.
根据 Agent 判断是否是智能手机
.
隐藏手机号中间四位为*方法
.
合并图片(二维码和其他图片合并)
.
ASP.NET CORE中判断是否移动端打开网页
.
ASP.NET(C#)实现页面计时(定时)自动跳转
可能有用的
.
gzip压缩
.
实现http多线程断点续传下载文件
.
实现多线程断点续传下载大文件
.
生成字符串的 CheckSum
.
根据 UserAgent 获取浏览器的类型和版本
.
根据 Agent 判断是否是智能手机
.
隐藏手机号中间四位为*方法
.
合并图片(二维码和其他图片合并)
.
ASP.NET CORE中判断是否移动端打开网页
.
ASP.NET(C#)实现页面计时(定时)自动跳转
咏矽
贡献的其它代码
(
11
)
.
java如何获得内网ip、外网ip
.
实现文件夹及文件压缩,并实现下载(三)——文件超过15
.
过滤emoji
.
frameset页面跳转
.
动态加载dll任意路径加载dll
.
添加本地jar到私有maven仓库
.
有提示、无弹窗的复制内容
.
建立定时JOB执行存储过程
.
用img代替ajax js心跳 向服务器定时传送参数 主要计算
.
选中一定数量文字触发事件进行分享、转发
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3