1.0以Stream 下载文件

            nl.fileid = Int32.Parse(id);  //服务器上对应的id
Stream stream = Lawsuit.DownLoad(nl);//服务器上的Stream 数据 Response.Buffer = false;
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + url); // 此处文件名如果是中文在浏览器默认是筹码,应该加HttpUtility.UrlEncode(filename) url:为下载文件的服务器地址和名称 while (true) //如果文件大于缓冲区,通过while循环多次加载文件
{
//开辟缓冲区空间
byte[] buffer = new byte[]; //读取文件的数据
int leng = stream.Read(buffer, , );
if (leng == ) //到文件尾,结束
break;
if (leng == ) //读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
Response.BinaryWrite(buffer); //向客户端发送数据流
else
{
//读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng]; for (int i = ; i < leng; i++)
b[i] = buffer[i];
Response.BinaryWrite(b);
}
}
stream.Close();//关闭下载文件
Response.End();//结束文件下载

 1.1根据流创建pdf

         /// <summary>
/// 根据流创建pdf
/// </summary>
/// <param name="_Stream"></param>
/// <returns></returns>
public string CreateCasePDF(Stream _Stream)
{
string pdfUrl = Server.MapPath("../Content/FilePdf");//pdf保存地址
if (Directory.Exists(pdfUrl) == false)//如果不存在就创建PDFFile文件夹
{
Directory.CreateDirectory(pdfUrl);
}
DocClient proxy = new DocClient();
try
{
string guid = Guid.NewGuid().ToString();
FileInfo file = new FileInfo(pdfUrl + guid + ".pdf");
Stream write = file.OpenWrite();
write.Position = long.Parse("");
byte[] buf = new byte[ * ];
int size = -;
long sum = long.Parse("");
while ((size = _Stream.Read(buf, , buf.Length)) > )
{
write.Write(buf, , size);
sum += size;
}
write.Close();
_Stream.Close();
return guid;
}
catch (Exception)
{
return null;
}
}

 1.2根据流生成MD5

        /// <summary>
/// 获取文件的MD5值
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
public static string GetMD5HashFromStream(Stream stream)
{
try
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = md5.ComputeHash(stream);
StringBuilder sBuilder = new StringBuilder();
for (int i = ; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString().ToUpper();
}
catch (Exception ex)
{
throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}

1.3删除指定目录下的文件,并再次创建

                string path = Server.MapPath("../Content/FilePdf");// 删除指定文件下的文件夹及其文件
Directory.Delete(path, true);
Directory.CreateDirectory(path);

来源地址:http://www.cnblogs.com/chaoa/archive/2012/03/09/2386106.html

ASP.NET MVC 以Stream 下载文件的更多相关文章

  1. asp.net mvc + javascript生成下载文件

    近期做的是对现有项目进行重构.WEB FROM改成MVC,其实也算是推倒重来了. 里面有一个导出功能,将数据输出成txt文件,供下载.原先的做法是有一个隐藏的iframe,在这个iframe的页面中设 ...

  2. asp.net mvc 上传下载文件的几种方式

    view: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...

  3. ASP.NET MVC之读取服务器文件资源的两种方式

    初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...

  4. 由ASP.NET Core根据路径下载文件异常引发的探究

    前言 最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架.由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行 ...

  5. ASP.NET MVC自定义ActionResult实现文件压缩

    有时候需要将单个或多个文件进行压缩打包后在进行下载,这里我自定义了一个ActionResult,方便进行文件下载 using System; using System.Collections; usi ...

  6. ASP.NET MVC - 探究应用程序文件夹

    为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下 ...

  7. 在asp.net mvc中上传大文件

    在asp.net mvc 页面里上传大文件到服务器端,需要如下步骤: 1. 在Control类里添加get 和 post 方法 // get method public ActionResult Up ...

  8. 解决asp.net mvc中*.resx资源文件访问报错

    个人笔记 问题重现 在asp.net mvc中,使用资源文件会出现一个问题,例如: 紧接着我进入视图界面,输入下面代码: <a href="javascript:void(0);&qu ...

  9. Spring MVC之ResposeEntity下载文件

    Spring Mvc中用ResponseEntity方式下载文件如下: @RequestMapping("/download") public ResponseEntity< ...

随机推荐

  1. jbpmAPI-5

    Part II. jBPM Core 5.1.概述本章介绍了API需要加载过程和执行它们.更多的细节如何定义过程本身,看看在BPMN 2.0章.与流程引擎交互(例如,开始一个过程),你需要建立一个会话 ...

  2. selenium 学习笔记 ---新手学习记录(5) 问题总结(java)

    1.今天遇到个奇葩问题,iframe有两个id相同的(如下图) 使用driver.switchTo().frame(“frmLinkPage1”);这个无法使用了. 后来改用driver.switch ...

  3. eclipse编译错误

    ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error AGE ...

  4. 转: angularjs学习总结(~~很详细的教程)

    1 前言 前端技术的发展是如此之快,各种优秀技术.优秀框架的出现简直让人目不暇接,紧跟时代潮流,学习掌握新知识自然是不敢怠慢. AngularJS是google在维护,其在国外已经十分火热,可是国内的 ...

  5. delphi 文件夹权限设置(执行一个小脚本的笨办法)

    如题,研究了一天,也没再网上找到比较好的方式,自己做了一个.方法如下: 1.创建一个 cmd 命令文件.2.调用该命令. 代码如下:   S:='echo y|cacls h: /t /c /g ev ...

  6. Mybatis 简单的CRUD 基于XML文件配置

    全部的ORM框架学习曲线都是先来一个CRUD爽一爽,以下我们就来CRUD一下,全部的配置都是基于上一篇的配置.废话不多说,直接上代码. <?xml version="1.0" ...

  7. Android多线程及异步处理问题

    1.问题提出 1)为何需要多线程? 2)多线程如何实现? 3)多线程机制的核心是啥? 4)到底有多少种实现方式? 2.问题分析 1)究其为啥需要多线程的本质就是异步处理,直观一点说就是不要让用户感觉到 ...

  8. JavaSE学习总结第07天_面向对象2

      07.01 成员变量和局部变量的区别 1.在类中的位置不同 成员变量    类中方法外 局部变量    方法内或者方法声明上 2.在内存中的位置不同 成员变量   堆内存 局部变量   栈内存 3 ...

  9. Arrays类学习笔记

    Arrays.asList(arr); 该方法可以把数组变成List集合. String[] arr = {"abc","cc"}; List<Strin ...

  10. setInterval(code, time)中code传递参数办法

    1.使用setInterval的场景 有时我们需要隔一定的时间执行一个方法,这时就会用到setInterval,但是由于这个方法是浏览器模拟出的Timer线程,在调用我们方法时不能为其传递参数. 2. ...