应用于ASP.NET MVC中

方法主体代码:

public void GetFilesByOrder(string Order_ID, string IntNumber)
{
MemoryStream ms = new MemoryStream();
byte[] buffer = null; List<MaterialInfo> mList = mBll.SelectEntitys(m => m.Owner_ID == Order_ID); using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
foreach (var item in mList)
{
UrlDataSource data = new UrlDataSource(CommonData.ApiFilePathBase + "Order/" + item.SaveName);
file.Add(data, item.Name);
}
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = ;
ms.Read(buffer, , buffer.Length);
}
Response.AddHeader("content-disposition", "attachment;filename=" + IntNumber + ".zip");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
}

此处关键点有:

  1.我不想在本地保存压缩包之后再下载,所以“ZipFile.Create(ms)”直接创建到内存里面

  2.我的文件不是在本地的,在远程服务器上,所以“file.Add”不能直接添加路径,需要实现IStaticDataSource接口

对IStaticDataSource的实现:

public class UrlDataSource : IStaticDataSource
{
public string Url { get; set; } public UrlDataSource(string url)
{
this.Url = url;
} public Stream GetSource()
{
return GetStreamUrl();
}
public Stream GetStreamUrl()
{
try
{
WebRequest req = WebRequest.Create(Url);
WebResponse result = req.GetResponse(); MemoryStream ms = new MemoryStream();
result.GetResponseStream().CopyTo(ms); ms.Position = ;
return ms;
}
catch
{
}
return null;
}
}

实际做的时候调试了很多次,都是下载下来的压缩包里面的文件是空的,最后才发现一个非常容易忽略的问题,就是在把文件流保存到内存里面后没有把位置设为0“ms.Position = 0;”,此时的位置是文件流的末尾,所以保存下来的文件是空的,解决这个问题后,就顺利实现了打包下载。

C#利用ICSharpCode将远程文件打包并下载的更多相关文章

  1. 利用svn的补丁文件打包生成增量文件

    下面的代码是maven版本 1. 创建patch.txt增量文件 保存到 文件目录下 比如 E:\aa\patch.txt 2. 编写java代码 package utils; import java ...

  2. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

    一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...

  3. Web端文件打包.zip下载

    使用ant.jar包的API进行文件夹打包.直接上代码: String zipfilename = "test.zip"; File zipfile = new File(zipf ...

  4. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  5. java 利用SMB读取远程文件

    package  com.yss.test.FileReadWriter; import  java.io.BufferedInputStream; import  java.io.BufferedO ...

  6. (八)利用apache组件进行文件上传下载

    一.文件上传 文件上传,即服务器端得到并处理用户上传的文件,这个文件存放在request里,也就是需要对request进行处理. 1.1 编写html文件 <!DOCTYPE html> ...

  7. Linux SSh scp使用【远程文件/目录的传输】

    一:Linux ssh scp的简介及作用: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们 ...

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

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

  9. asp.net文件压缩,下载,物理路径,相对路径,删除文件

    知识动手实践一次,就可以变成自己的了.不然一直是老师的,书本的. 这几天做了一个小小的项目,需要用到文件下载功能,期初想到只是单个的文件,后面想到如果很多文件怎么办?于是又想到文件压缩.几经波折实践, ...

随机推荐

  1. Day 27 网络编程

    目录 网络架构及演变过程 网络架构 互联网和互联网的组成 互联网的组成(教材版) 互联网的组成(科普版) 互联网的硬件组成 互联网的软件组成 OSI七层协议 物理层 数据链路层 网络架构及演变过程 网 ...

  2. Error from server at http://127.0.0.1:8983/solr/xxx: undefined field type

    undefined field type就是说没有定义type类型,这样情况下,可以新建一个带type的索引,比如:{type:1, id:1, name:"张三"}

  3. JSONP代码收藏

    摘抄自jQuery,用于JSONP请求. var callback = 'callback_' + (new Date() - 0), url = 'http://localhost/', scrip ...

  4. Python-----基本操作

    Python是一种简单易学,且功能强大的编程语言.它是面向对象的编程语言. 对象的意义: 对象可以通过一个“.” 的方式来调用这个对象的方法. Python环境安装配置: Python是一种通用的计算 ...

  5. hdu2003 求绝对值【C++】

    求绝对值 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. Android第三方开源图片裁剪截取:cropper

     Android第三方开源图片裁剪截取:cropper 很多app都需要裁剪截取图片作为头像.logo之类,而cropper是github上的一个针对Android平台的.第三方开源图片裁剪截取项 ...

  7. IDEA 工具使用报错总结

    读前语:此文章仅给非入门级观看 1.使用Debug  无法运行,而使用Run 则正常启动,报错代码如下 1 Error running 'jx_web': Unable to open debugge ...

  8. 清北学堂模拟赛d2t3 逆序对(pair)

    题目描述LYK最近在研究逆序对.这个问题是这样的.一开始LYK有一个2^n长度的数组ai.LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设n=4,k=2,则a[1],a ...

  9. thymeleaf模板引擎基础使用(转)

    刚好项目上用到这个模板引擎,记录以下基础用法. thymeleaf介绍 简单说, Thymeleaf是一个跟Velocity.FreeMarker类似的模板引擎,它可以完全替代JSP .相比其他的模板 ...

  10. ELECTRON开发环境配置方法

    1.下载并安装Node.js 下载地址:https://nodejs.org/en/download/current/ 安装之后进行验证 2.下载并这装electron 安装命令:npm instal ...