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

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

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

表名: 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"]);


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将 PDF 文件转换二进制数据可以使用 Blob 类型,可以将其存储到数据库中。而 PB(Protocol Buffer)是一种序列化数据的格式,可以将结构化数据序列化为二进制格式,也可以将二进制格式反序列化为结构化数据。 如果要将 PDF 文件转换为二进制数据并保存数据库中,可以使用以下步骤: 1. 读取 PDF 文件内容,将其存储到一个字节数组中。 2. 将字节数组转换为 Blob 对象。 ```java File file = new File("example.pdf"); byte[] pdfData = Files.readAllBytes(file.toPath()); Blob blob = new SerialBlob(pdfData); ``` 3. 将 Blob 对象存储到数据库中。 ```java PreparedStatement statement = connection.prepareStatement("INSERT INTO documents (pdf_data) VALUES (?)"); statement.setBlob(1, blob); statement.executeUpdate(); ``` 如果要从数据库中读取保存的 PDF 文件,可以使用以下步骤: 1. 查询数据库,获取保存的 Blob 对象。 ```java PreparedStatement statement = connection.prepareStatement("SELECT pdf_data FROM documents WHERE id = ?"); statement.setInt(1, id); ResultSet result = statement.executeQuery(); result.next(); Blob blob = result.getBlob("pdf_data"); ``` 2. 将 Blob 对象转换为字节数组。 ```java byte[] pdfData = blob.getBytes(1, (int) blob.length()); ``` 3. 将字节数组保存为 PDF 文件。 ```java File file = new File("example.pdf"); Files.write(file.toPath(), pdfData); ``` 如果要使用 PB 将结构化数据序列化为二进制格式,可以使用 PB 库提供的 API,例如在 Java 中可以使用 com.google.protobuf 库。 如果要将 PB 序列化的二进制数据保存数据库中,可以使用类似上述的方法,将字节数组转换为 Blob 对象并存储到数据库中。 如果要从数据库中读取保存的 PB 数据,可以使用类似上述的方法,将 Blob 对象转换为字节数组,并使用 PB 库提供的 API 反序列化为结构化数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值