asp.net 直接 从数据库 下载 文件
2010-03-08 19:07
399 查看
当我们想要从网上下载文件时,通常的做法是在服务器上的某个目录下生成一个文件。
但会存在这样的情况,直接从数据库中下载图片。
其实原理很简单。就是用MemoryStream代替FileStream。有一点需要注意就是http头的格式要设置正确。
还有一点要注意的是:对图片操作以后要把ms转移出来然后再new一下。如下所示。
否则的话图片会不显示的。
protected void DownloadFile(string filename) { string saveFileName = "test.xls"; int intStart = filename.LastIndexOf("//") + 1; saveFileName = filename.Substring(intStart, filename.Length - intStart); Response.Clear(); Response.Charset = "utf-8"; Response.Buffer = true; this.EnableViewState = false; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AppendHeader("Content-Disposition", "attachment;filename=" + saveFileName); Response.WriteFile(filename); Response.Flush(); Response.Close(); Response.End(); }
但会存在这样的情况,直接从数据库中下载图片。
其实原理很简单。就是用MemoryStream代替FileStream。有一点需要注意就是http头的格式要设置正确。
byte[] pic = //从数据库返回的图片 MemoryStream ms = new MemoryStream(pic); System.Drawing.Image img = null; Graphics g =null; try { img = new Bitmap(new MemoryStream(pic)); g= Graphics.FromImage(img); Font objfont = new Font("Verdana", 12, FontStyle.Bold); Brush objbrush = Brushes.Red; Rectangle rect = new Rectangle(150, 550, 200, 50); g.DrawString("添加文字", objfont, objbrush, rect); img.Save(ms, ImageFormat.Bmp); } catch { } finally { if (img != null) img.Dispose(); if (g!= null) g.Dispose(); } byte[] newbmp = ms.ToArray(); ms.Close(); ms = new MemoryStream(newbmp); Response.Clear(); Response.AddHeader("Content-type", "binary/octet-stream"); Response.AddHeader("Content-Length", pic.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename="+pic.Length.ToString()+".bmp; size=" + pic.Length.ToString()); Response.Flush(); int chunksize=1024; int lenght = ms.ToArray().Length; for(int i=0;i<lenght;i+=chunksize) { if(Response.IsClientConnected==false)break; int size=chunksize; if(i+size>=pic.Length) size=pic.Length-i; byte[] chunk=new byte[size]; ms.Read(chunk,0,size); Response.BinaryWrite(chunk); Response.Flush(); } ms.Close(); }
还有一点要注意的是:对图片操作以后要把ms转移出来然后再new一下。如下所示。
byte[] newbmp = ms.ToArray(); ms.Close(); ms = new MemoryStream(newbmp);
否则的话图片会不显示的。
相关文章推荐
- ASP.NET文件下载简单实现(也可以通过直接读取数据库 大字段文件,如oracle 中的bolg,long raw 等大字段文件)
- ASP.NET MVC文件上传下载Demo(文件保存在数据库)
- ASP.NET直接下载一个文件,而不是在IE中打开它
- 【转】Asp.net下载文件、文件流输出 直接输出文件
- asp.net中下载TEXT文件,而不是直接在IE中打开
- asp.net apk文件不能直接下载的解决方法
- ASP.NET直接下载一个文件
- asp.net直接下载一个文件和直接打开一个文件
- asp.net生成csv文件,并在客户端点击下载(文件流直接输出到客户端而不是先生成保存在服务端再下载)
- ASP.NET文件下载,直接向客户端输出文件(转)
- ASP.NET中实现直接从网页上下载文件,而不须引用文件URL来下载
- ASP.NET中实现直接从网页上下载文件
- ASP.NET下载文件时直接弹出“另存为”对话框
- Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)
- ASP.NET文件下载,直接向客户端输出文件
- ASP.NET中实现直接从网页上下载文件,而不须引用文件URL来下载
- ASP.NET直接下载一个文件,而不是在IE中打开它
- asp.net 2.0 页面中直接输出数据库中的txt、html文件格式流
- ASP.NET下载文件出现提示框或者直接显示在浏览器中
- ASP.NET直接下载文件