一、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. CSS Sprites(CSS精灵) 的优缺点

    CSS Sprites 的优点:     1.减少图片的字节     2.减少了网页的http请求,从而大大的提高了页面的性能     3.解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命 ...

  2. rails中params[:id]与params["id"]分析

    写这个帖子的缘由是因为在页面参数传到rails的controller时用params[:]和params[""]都可以取到值: [1] pry(#<BooksControll ...

  3. Feign性能优化注意事项--超时

      Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 1. at feign ...

  4. layer 中的 layer.alert layer.msg layer.confirm

    1.layer.alert layer.alert('见到你真的很高兴', {icon: 6}); 效果图 layer.alert('墨绿风格,点击确认看深蓝', { skin: 'layui-lay ...

  5. CentOS6.8启动Tomcat无法访问

    今天笔者在CentOS6.8的生产环境上配置Java环境,安装JDK,部署Tomcat,这本来是很简单的一件事,可是最后发现通过IP一直访问不了Tomcat的默认页面. 图1. 无法访问Tomcat默 ...

  6. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 问题修改

    ubuntu 常见错误–Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx或者apt-get update时出 ...

  7. 我Win下常用工具清单

    GoAgent 搞研发的没有一个FQ访问Google的工具,真没法工作,所以第一主推这个, 相关按照方式请参考: http://www.cnblogs.com/ghj1976/category/696 ...

  8. spring源码分析-core.io包里面的类

    前些日子看<深入理解javaweb开发>时,看到第一章java的io流,发觉自己对io流真的不是很熟悉.然后看了下JDK1.7中io包的一点点代码,又看了org.springframewo ...

  9. java网络编程(TCP详解)

    网络编程详解-TCP 一,TCP协议的特点              面向连接的协议(有发送端就一定要有接收端)    通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小 ...

  10. 容易忽略的小知识之 Date 函数参数

    Date 对象启用基本存储器并取得日期和时间. dateObj = new Date()dateObj = new Date(dateVal)dateObj = new Date(year, mont ...