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

文:黎承湘

 

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

 

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

ContractedBlock.gif ExpandedBlockStart.gif 把文件上传以二进制流方式保存到数据库
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();
        }

 

ContractedBlock.gif ExpandedBlockStart.gif 文件下载
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;
        }

 

注:这是请教一个达人找到的。在网上四处找寻把音频文件上传到数据库,然后读取出来播放,一直没结果。

特放上做为记录

转载于:https://www.cnblogs.com/nonsuch/archive/2008/08/21/1273169.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值