一、zip打包下载

1.依赖引用:ICSharpCode.SharpZipLib

2.设定网站有单独文件服务器,网站目录下有虚拟路径FileFolder,通过虚拟路径将文件映射到文件服务器。

设定根据Guid id可以获取到所需的文件集合

/// <summary>
/// 下载zip文件
/// </summary>
/// <param name="id"></param>
public void DownloadFiles(Guid id)
{
var files = fileservice.GetFiles(c => c.GroupId == id).ToList();
List<string> paths = new List<string>(files.Count);
//数据库文件存储示例:\FileFolder\file/20161215170146_9767.pdf
string savePath = HttpContext.Server.MapPath(@"~\FileFolder\");
foreach (var file in files)
{
//验证文件是否存在...
paths.Add(savePath + file.FilePath.Replace(@"\FileFolder\", ""));
}
string downloadName = "批量下载" + files[].FileName + "等";
HttpContext.Response.Clear();
HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + downloadName + ".zip");
HttpContext.Response.ContentType = "application/zip";
HttpContext.Response.CacheControl = "Private";
HttpContext.Response.Cache.SetExpires(DateTime.Now.AddMinutes()); DownloadZipToBrowser(paths);
}
        /// <summary>
/// 下载压缩文件
/// </summary>
/// <param name="list"></param>
private void DownloadZipToBrowser(IEnumerable<string> list)
{
ZipOutputStream zipOutputStream = null;
var response = HttpContext.Response;
try
{
byte[] buffer = new byte[];
zipOutputStream = new ZipOutputStream(response.OutputStream);
zipOutputStream.SetLevel(); //0-9, 9 being the highest level of compression
foreach (string fileName in list)
{
string filepath = Server.MapPath(fileName);
Stream fs = System.IO.File.OpenRead(filepath); ZipEntry entry = new ZipEntry(Path.GetFileName(filepath));
entry.Size = fs.Length;
zipOutputStream.PutNextEntry(entry);
int count = fs.Read(buffer, , buffer.Length);
while (count > )
{
zipOutputStream.Write(buffer, , count);
count = fs.Read(buffer, , buffer.Length);
if (!response.IsClientConnected)
{
break;
}
response.Flush();
}
fs.Close();
} }
catch (Exception)
{ }
finally
{
if (zipOutputStream != null)
zipOutputStream.Close();
response.Flush();
response.End();
}
}

二、直接下载某一个文件:

        /// <summary>
/// 下载文件
/// </summary>
/// <param name="id">FileId</param>
public void DownloadFile(int id )
{
string savePath = HttpContext.Server.MapPath(@"~\FileFolder\");
var fileinfo = fileservice.Find(id);
string fullname = savePath + fileinfo.FilePath.Replace(@"\FileFolder\", "");
//string fullname = fileinfo.FilePath;
//判断文件是否存在
if (!System.IO.File.Exists(fullname))
{
Response.Write("该文件不存在服务器上");
Response.End();
return;
}
FileInfo fi = new FileInfo(fullname);
//**********处理可以解决文件类型问题
string fileextname = fi.Extension;
string DEFAULT_CONTENT_TYPE = "application/unknown";
RegistryKey regkey, fileextkey;
string filecontenttype;
try
{
regkey = Registry.ClassesRoot;
fileextkey = regkey.OpenSubKey(fileextname);
filecontenttype = fileextkey.GetValue("Content Type", DEFAULT_CONTENT_TYPE).ToString();
}
catch
{
filecontenttype = DEFAULT_CONTENT_TYPE;
}
//**********end
Response.Clear();
Response.Charset = "utf-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileinfo.FileName, System.Text.Encoding.UTF8));
Response.ContentType = filecontenttype;
Response.WriteFile(fullname);
Response.End();
}
    

asp.net mvc文件下载的更多相关文章

  1. ASP.net MVC 文件下载的几种方法

      ASP.net MVC 文件下载的几种方法(欢迎讨论) 在ASP.net MVC 中有几种下载文件的方法前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不 ...

  2. ASP.net MVC 文件下载的几种方法(欢迎讨论)

    在ASP.net MVC 中有几种下载文件的方法 前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不知道,但是还挺想了解的. 第一种:最简单的超链接方法,&l ...

  3. 【基础】ASP.net MVC 文件下载的几种方法(欢迎讨论)

    在ASP.net MVC 中有几种下载文件的方法 前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不知道,但是还挺想了解的. 第一种:最简单的超链接方法,&l ...

  4. ASP.NET MVC 了解FileResult的本质

    FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端.ASP.NET MVC定义了三个具体的FileResult,分 ...

  5. ASP.NET MVC+EF5 开发常用代码

      Asp.Net Mvc,EF 技术常用点总结 1.Asp.Net MVC a)获得当前控制器名和当前操作的名称(action) 1.Action 中 RouteData.Values[" ...

  6. ASP.NET MVC进阶二

    一.数据验证 数据验证的步骤 在模型类中添加与验证相关的特性标记 在客户端导入与验证相关的js文件和css文件 使用与验证相关的Html辅助方法 在服务器端判断是否通过服务器端验证 常用的验证标记 R ...

  7. Asp.net MVC 处理文件的上传下载

    如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...

  8. [解决]ASP.NET MVC 4/5 源码调试(source code debug)

    ========================ASP.NET MVC 4============================ ASP.NET MVC 4 source code download ...

  9. 利用Asp.net MVC处理文件的上传下载

    如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...

随机推荐

  1. java面试③Web部分

    2.2.1 讲一下http get和post请求的区别 get和post请求都是http的请求方式,用户通过不同的http请求方式完成对资源(url)的不同操作,具体点来讲get一般用于获取/查询资源 ...

  2. Eclipse内存讲解,eclipse.ini设置

    Ubuntu 系统下,Eclipse 配置文件: vi ~/eclipse/eclipse.ini -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:Max ...

  3. linux 权限详解

    转载自博客园: http://www.cnblogs.com/123-/p/4189072.html 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所 ...

  4. Redis--redis集群环境搭建

    1.redis-cluster架构图 Redis 自3.0以后开始支持集群.从上图我们可以看出,redis集群的每个节点之间都进行相互通信,在redis集群中,不存在代理层,即没有固定的入口.redi ...

  5. DOM-使用节点

    节点类型 DOM规定:整个文档是一个文档节点,每个标签是一个元素节点,元素包含的文本是文本节点,元素的属性是一个属性节点,注释属于注释节点,如此等等: 每个节点都有一个nodeType属性,用于标明节 ...

  6. Linux下socket通信和多线程

    服务端socket流程:socket() –> bind() –> listen() –> accept() –> 读取.发送信息(recv,send等) 客户端socket流 ...

  7. tcpcopy架构

    tcpCopy 1.0 的最新架构分为三个角色: Online Server(OS):上面要部署 TCPCopy,从数据链路层(pcap 接口)抓请求数据包,发包是从IP层发出去: Test Serv ...

  8. 第二十二天- 序列化 pickle json shelve

    # 序列化:存储或传输数据时,把对象处理成方便存储和传输的数据格式,这个过程即为序列化# Python中序列化的三种方案:# 1.pickle python任意数据——>bytes写入⽂件:写好 ...

  9. YII中利用urlManager将URL改写成restful风格

    这里主要涉及url显示样式 1.打开config文件夹下面的mian.php   2.修改内容   如把地址http://www.test.com/index.php?r=site/page/sid/ ...

  10. 关于java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap的错误解决办法

    在JavaEE开发中,在把配置文件中的数据或用户表单提交上来的数据,封装在相应JavaBean的对象的对应属性中时:在实际开发中,使用第三方法工具包BeanUtils(commons-beanutil ...