您的位置:首页 > 数据库

文件以二进制流保存到数据库及下载

2013-11-13 11:38 531 查看
文件以二进制流保存到数据库及下载

文:黎承湘

为了实现此功能,查阅不少资料,发过不少求助信息,现整理出来,以供有需人士查阅.

表名: myfile; 表字段: id(int), Content(image),Type(varchar(50))

把文件上传以二进制流方式保存到数据库

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.IO;

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

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

Stream fileDataStream = FileUpload1.PostedFile.InputStream;

HttpPostedFile file = FileUpload1.PostedFile;

int fileLength = FileUpload1.PostedFile.ContentLength;

byte[] fileData = new byte[fileLength];

//把文件流填充到数组

fileDataStream.Read(fileData, 0, fileLength);

string fileType = Path.GetExtension(FileUpload1.PostedFile.FileName); //获取文件扩展名

SqlConnection cn = new SqlConnection(); //连接数据库

cn.Open();

SqlCommand cmd = new SqlCommand( "insert myfile(Content,Type) values(@Content,@Type) ", cn);

cmd.Parameters.AddWithValue( "@Content ", fileData);

cmd.Parameters.AddWithValue( "@Type ", fileType);

cmd.ExecuteNonQuery();

cn.Close();

}

}

文件下载

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.IO;

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

{

protected void Page_Load(object sender, EventArgs e)

{

SqlConnection cn = new SqlConnection();//数据库链接

cn.Open();

SqlDataAdapter da2 = new SqlDataAdapter( "select * from myfile where id= 24 ", cn);//读出数据库中相应的数据

DataSet ds2 = new DataSet();

da2.Fill(ds2);

byte[] b2 = (byte[])ds2.Tables[0].Rows[0][ "files "];

string type = (string)ds2.Tables[0].Rows[0][ "type "];

Response.Clear();

string Type = checktype(type);

Response.AddHeader("Content-Disposition","attachment; filename=”下载”+type);

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

Response.ContentType = Type;

Response.BinaryWrite(b2);

Response.End();

string FileName = ((LinkButton)sender).CommandArgument;

Response.Clear();

Response.ContentType = Type;

Response.AddHeader("Content-Disposition","attachment;FileName= " + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));

Response.WriteFile(FileName);

Response.End();

}

//根据文件的扩展名来获取对应的“输出流的HTTP MIME“类型

private string checktype(string filename)

{

string ContentType;

switch(filename.Substring(filename.LastIndexOf(". ")).Trim().ToLower())

{

case ".asf ":

ContentType = "video/x-ms-asf ";

break;

case ".avi ":

ContentType = "video/avi ";

break;

case ".doc ":

ContentType = "application/msword "; break;

case ".zip ":

ContentType = "application/zip "; break;

case ".xls ":

ContentType = "application/vnd.ms-excel "; break;

case ".gif ":

ContentType = "image/gif "; break;

case ".jpg ":

ContentType = "image/jpeg "; break;

case "jpeg ":

ContentType = "image/jpeg "; break;

case ".wav ":

ContentType = "audio/wav "; break;

case ".mp3 ":

ContentType = "audio/mpeg3 "; break;

case ".mpg ":

ContentType = "video/mpeg "; break;

case ".mepg ":

ContentType = "video/mpeg "; break;

case ".rtf ":

ContentType = "application/rtf "; break;

case ".html ":

ContentType = "text/html "; break;

case ".htm ":

ContentType = "text/html "; break;

case ".txt ":

ContentType = "text/plain "; break;

default:

ContentType = "application/octet-stream ";

break;

}

return ContentType;

}

}

附加说明:

如果是".docx"

的则为ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"

本篇文章来源于 时代财富视觉 原文链接:http://vision.anyp.com/uveditor/10184-112473.aspx

File.WriteAllBytes("文件名", (byte[])dr["ImageData"]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐