ASP.NET MVC 以Stream 下载文件
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 下载文件的更多相关文章
- asp.net mvc + javascript生成下载文件
近期做的是对现有项目进行重构.WEB FROM改成MVC,其实也算是推倒重来了. 里面有一个导出功能,将数据输出成txt文件,供下载.原先的做法是有一个隐藏的iframe,在这个iframe的页面中设 ...
- asp.net mvc 上传下载文件的几种方式
view: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...
- ASP.NET MVC之读取服务器文件资源的两种方式
初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...
- 由ASP.NET Core根据路径下载文件异常引发的探究
前言 最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架.由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行 ...
- ASP.NET MVC自定义ActionResult实现文件压缩
有时候需要将单个或多个文件进行压缩打包后在进行下载,这里我自定义了一个ActionResult,方便进行文件下载 using System; using System.Collections; usi ...
- ASP.NET MVC - 探究应用程序文件夹
为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下 ...
- 在asp.net mvc中上传大文件
在asp.net mvc 页面里上传大文件到服务器端,需要如下步骤: 1. 在Control类里添加get 和 post 方法 // get method public ActionResult Up ...
- 解决asp.net mvc中*.resx资源文件访问报错
个人笔记 问题重现 在asp.net mvc中,使用资源文件会出现一个问题,例如: 紧接着我进入视图界面,输入下面代码: <a href="javascript:void(0);&qu ...
- Spring MVC之ResposeEntity下载文件
Spring Mvc中用ResponseEntity方式下载文件如下: @RequestMapping("/download") public ResponseEntity< ...
随机推荐
- 利用python进行数据分析之数据聚合和分组运算
对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...
- google浏览器的安装
很简单,命令行下安装命令:apt-get install google-chrome-stable(如安装不成功,输入apt-get -f install进行修复依赖,之后在菜单里就可以看到图标了) ...
- SQLITE 多进程查询出错database is locked
程序比较简单: 父进程查询数据库A表,没有更新操作 子进程同时查询数据库A表,查询出来的内容更新B表. 两个进程都放到while(1)循环中,速度慢的话就是2S执行一次就没有错,执行的速度快的话就会报 ...
- libcprops
Install Howto Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_6 ...
- document.createElement在IE和Firefox下的差异
IE有3种方式都可以创建一个元素: 1 document.createElement("<input type=text>") 2 document.createEle ...
- ListBox控件例子
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListBox.aspx.c ...
- 网页中获取网络mp3文件的时常
<html> <audio id="audio" controls> <source src="http://cdn.kaishuhezi. ...
- jQuery 自学笔记—3
jQuery 语法实例 $(this).hide() 演示 jQuery hide() 函数,隐藏当前的 HTML 元素. $("#test").hide() 演示 jQuery ...
- HDU 1276 士兵队列训练问题
模拟题,学了一下list it=li.erase(it):指向删除后的第一个元素 #include <cstdio> #include <list> using namespa ...
- HashMap和HashTable 学习
1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key的hash ...