asp.net 上传下载输出二进制流实现代码

复制代码 代码如下:

  using System;

  using System.Collections;

  using System.Configuration;

  using System.Data;

  using System.Linq;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.HtmlControls;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Data.SqlClient;

  using System.IO;

  namespace Delegate

  {

  public partial class ReadStream : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  }

  /// <summary>

  /// 将上传的文件转换成二进制流保存在数据库

  /// </summary>

  /// <param name="sender"></param>

  /// <param name="e"></param>

  protected void Button1_Click(object sender, EventArgs e)

  {

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ToString());

  string strSql="insert into test(timage)values(@images)";//保存二进制流的方式需参数的形式

  SqlCommand cmd = new SqlCommand(strSql, conn);

  conn.Open();

  string filepath = Server.MapPath("~/");

  filepath += FileUpload1.FileName;

  FileUpload1.SaveAs(filepath);

  FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);//读取文件

  BinaryReader br = new BinaryReader(fs);

  byte[] photo = br.ReadBytes((int)fs.Length);

  br.Close();

  fs.Close();

  cmd.Parameters.Add("@images", SqlDbType.Binary, photo.Length);//设置参数

  cmd.Parameters["@images"].Value = photo;//设置值

  if (cmd.ExecuteNonQuery() == 1)

  {

  Response.Write("添加成功!");

  }

  conn.Close();

  }

  protected void Button2_Click(object sender, EventArgs e)

  {

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ToString());

  conn.Open();

  string strSql = "select top 1 timage from test";

  SqlCommand cmd = new SqlCommand(strSql, conn);

  SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

  if (dr.Read())

  {

  byte[] by = (byte[])dr[0];

  Response.AddHeader("Content-Disposition", "attachment; filename=ceshi.txt");//设置读取的文件头

  Response.AddHeader("Content-Length", by.Length.ToString());

  Response.ContentType = "text/plain";//设置输出类型 这里可以保存在数据库中 动态实现类型

  Response.OutputStream.Write(by, 0, by.Length); //输出

  Response.Flush();

  }

  conn.Close();

  }

  }

  }