文件以二进制流保存到数据库及下载(转载)
文:黎承湘
为了实现此功能,查阅不少资料,发过不少求助信息,现整理出来,以供有需人士查阅.
表名: 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 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;
}
}
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;
}
}
注:这是请教一个达人找到的。在网上四处找寻把音频文件上传到数据库,然后读取出来播放,一直没结果。
特放上做为记录