博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net mvc文件下载
阅读量:6598 次
发布时间:2019-06-24

本文共 4483 字,大约阅读时间需要 14 分钟。

一、zip打包下载

1.依赖引用:ICSharpCode.SharpZipLib

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

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

///         /// 下载zip文件        ///         ///         public void DownloadFiles(Guid id)        {            var files = fileservice.GetFiles(c => c.GroupId == id).ToList();            List
paths = new List
(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[0].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(3)); DownloadZipToBrowser(paths); }
///         /// 下载压缩文件        ///         ///         private void DownloadZipToBrowser(IEnumerable
list) { ZipOutputStream zipOutputStream = null; var response = HttpContext.Response; try { byte[] buffer = new byte[4096]; zipOutputStream = new ZipOutputStream(response.OutputStream); zipOutputStream.SetLevel(6); //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, 0, buffer.Length); while (count > 0) { zipOutputStream.Write(buffer, 0, count); count = fs.Read(buffer, 0, buffer.Length); if (!response.IsClientConnected) { break; } response.Flush(); } fs.Close(); } } catch (Exception) { } finally { if (zipOutputStream != null) zipOutputStream.Close(); response.Flush(); response.End(); } }

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

///         /// 下载文件        ///         /// FileId        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();        }

 

 

转载于:https://www.cnblogs.com/riddly/p/7977750.html

你可能感兴趣的文章
Jquery 选择器注意的问题--记录(五)
查看>>
Log4net入门使用
查看>>
PHP正则表达式完全手册
查看>>
Linux 的 Shell
查看>>
jQuery改造插件,添加回调函数
查看>>
NetFlow网络流量监测技术的应用和设计(转载)
查看>>
前端网站开发CSS选择器
查看>>
Java性能总结一(转)
查看>>
IE9/Firefox/Safari/Chrome/Opera支持模拟触发自定义DOM事件
查看>>
杂谈---这些大忌,你在面试的时候发生过吗?(NO.1)
查看>>
minix中atoi、atol、atof的实现
查看>>
高效 Java Web 开发框架 JessMA v3.3.1 正式发布
查看>>
[转]C# WinForm动态调用远程Web服务
查看>>
跨数据库服务器查询和跨表更新
查看>>
盘点2013年那些最优秀的网页设计作品【系列五】
查看>>
C#语音朗读文本 — TTS的实现
查看>>
MongoDB中的高级查询(二)
查看>>
再寄小读者之数学篇[2014.07.01-2014.12.31]
查看>>
LA 4080 (多源最短路径+边修改+最短路径树)
查看>>
轻量级工具提示jQuery插件 - Tooltipster
查看>>