ASP.net利用DotNetZip压缩文件,用流输出文件细节
来源:互联网 发布:淘宝女式皮鞋特价 编辑:程序博客网 时间:2024/06/07 01:31
将文件加载到zip文件之后,需要提供下载,最开始的方法是先将打包好的压缩文件保存到文件夹中,然后再重新通过文件路径来返回文件提供下载。但是在上传到服务器之后发现,通过文件路径返回文件提供下载的方法行不通,接着就想到最好是将压缩文件zip加载到流中,然后返回流就能下载文件。
public ActionResult AcodTypeToExport() { var worksList = db.Pictures.Include("User").Where(u => SqlFunctions.PatIndex(startwithStr, u.User.user_number) > 0).ToList(); ListpathList = new List (); foreach (var item in worksList) { string path = item.picture_path; pathList.Add(path); } Admin admin = (Admin)Session["_admin"]; if (admin == null) return Redirect("/Admins/Account/login"); string filename = admin.ad_number + "_" + admin.ad_name; DownLoadController down = new DownLoadController(); List pathlist = down.BatchDownload(pathList, filename); if (pathlist.Count() > 0) { using (ZipFile zip = new ZipFile(System.Text.Encoding.Default)) { for (int i = 0; i < pathlist.Count(); i++) { zip.AddFile(pathlist[i], "Images"); } Stream ms = new MemoryStream(); zip.Save(ms); ms.Seek(0, SeekOrigin.Begin);//将ms流重置,让后面调用可以获取到正确的流,否则可能会获取不到文件 return File(ms, "application/zip", "zip.zip"); } } return null; }
我在这些地方犯过的错,当时因为不太懂流的这个概念,所以处处碰壁
注意:
1、使用MemoryStream的时候,误以为所有要使用到流的类时都需要使用using来引用或是调用流的关闭和释放的方法,就当我这么做了之后,就发现运行时会报一个“使用的流已经关闭”之类的异常,后来在百度上搜索,查看之前自己写的代码,就明白了,使用using他相当于是会自动关闭流,所以才会抛出流已关闭的异常。然而在这里使用是不能关闭流,所以直接使用MemoryStream类,不需要用using来引用,就不会抛出之前的异常了;
2、解决了上面的问题之后又出来一个新的问题,就是下载的zip文件里根本没有文件,于是搜百度,看到ms需要重置流的位置才行,就是将ms流的开始位置至于0处,就能正确的将整个文件下载下来了,这个问题是这里看到的https://q.cnblogs.com/q/16755/
阅读全文
0 0
- ASP.net利用DotNetZip压缩文件,用流输出文件细节
- asp.net利用winrar 压缩文件 和解压文件
- ASP.NET利用输出流生成下载文件(doc、xml..)
- 利用asp.net输出RSS
- Asp.net压缩文件
- asp.net上传压缩文件
- .NET 操作ZIP文件第三方库DotNetZip
- Asp.net调用RAR压缩文件与解压文件源码
- asp.net 输出XML文件
- Asp.net利用ExcelLibrary输出EXCEL
- ASP.NET 压缩和解压缩文件
- DotNetZip
- ASP.NET 直接输出Excel文件
- asp.net 向客户端输出大文件
- asp.net输出文件是添加bom
- asp.net开发细节
- asp.net细节注意
- 利用ASP.NET向服务器上传文件
- 关于centOS6.5安装问题
- jquery性能优化
- Codeforces Round #452 (Div. 2) B. Months and Years
- HDOJ 1004 Let the Balloon Rise 让气球升起来
- Ajax文件上传
- ASP.net利用DotNetZip压缩文件,用流输出文件细节
- SSL P2325 最小转弯问题 题目
- Hibernate_基本配置
- java--jvm--内存管理
- 2017/12/18 钉钉开放API调用
- linux下安装JDK
- 【JZ2440】自我学习记录【1】【hello world】
- 深度学习: 凸 & 非凸 区别
- 作业10--数组和广义表以及树的基本概念