【拾金者】用Sql Server儲存上載圖片字型
在學習Asp.net開發Web應用程式的時候,我遇上這樣一個問題.就是我們常見的在網站上傳圖片,檔案之類
的,這在asp.net中似乎很簡單,不就一個HttpPostedFile就搞定了嗎?呵呵.的確,HttpPostedFile非常方便
的給我們提供了從Local to Host的HttpPostedFile類.但是我在想,可否用資料庫來儲存這些圖片或檔案
呢?答案是肯定的,計算機上的任何資料都是以二進位制儲存的.下面本著我這兩天的學習,來總結一下....
思路:
任何計算機上的資料都以二進位制儲存.我們只需將資料以二進位制的形式儲存到資料庫即可.
這裡我們使用Sql Server資料庫.用Image型別來儲存二進位制.
步驟:
1.當然是在Sql Server中建一個儲存上傳資料的表咯.
id:上載資料內容的md5值確保資料庫中無重複資料,可用作檔名
data:上載檔案資料
type:副檔名
length:資料長度
time:上載時間
CREATE TABLE [picture] (
[id] [char] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[data] [image] NULL ,
[type] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[length] [int] NULL ,
[Time] [datetime] NULL ,
CONSTRAINT [PK_picture] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
2.建立一個HtmlInputFile控制元件物件myFile.上傳的資料就是通過這個物件myFile傳遞進來的.它有一個重
要屬性PostedFile,它是一個HttpPostedFile物件
PostedFile.ContentLength: 檔案長度
PostedFile.ContentType: 檔案型別
PostedFile.FileName 檔名
PostedFile.InputStream 檔案流資料
PostedFile.Save() 將檔案保入磁碟
3.轉換上載的資料和處理要寫入資料庫中的資料
客戶端上載的資料是以流的形式儲存在HttpPostedFile物件的InputStream中.
接下來要做的就是處理資料流,將它轉換成二進位制資料
//----------------轉換二進位制--------------------//
InputStream.Seek(0,SeekOrigin.Begin); // 注意使用確保Position在開始
byte[] bdata = new byte[Length];
Data.Read(bdata,0,Length);
//----------------以MD5儲存ID-------------------//
InputStream.Seek(0,SeekOrigin.Begin);
BinaryReader br = new BinaryReader(InputStream);
char[] cd = new char[Length];
cd = br.ReadChars(Length);
string id = new string(cd);
id = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(id,"MD5");
//---------------其它儲存資料--------------------//
string ExtName = PostedFile.FileName.Substring(PostedFile.FileName.LastIndexOf(".")+1) //取
副檔名
string Length = PostedFile.ContentLength //檔案大小
4.ADO操作
SqlConnection myConnection = new SqlConnection(ConString);
SqlCommand UpLoadCommand = new SqlCommand("Insert into picture(id,data,type,length,time)
values(@id,@data,@type,@length,getdate())",MyClass.Con);
UpLoadCommand.Parameters.Add("@id",id);
UpLoadCommand.Parameters.Add("@data",bdata);
UpLoadCommand.Parameters.Add("@type",ExtName);
UpLoadCommand.Parameters.Add("@length",Length);
myConection.Open();
UpLoadCommand.ExecuteNonQuery();
myConnection.Close();
//----------------------------------------------------------------------------------------------------------------
讀取資料庫圖片就不用我說了吧..Response有一個為二進位制準備的BinaryWrite(byte[] buffer)方法.用它就可以把圖片輸出到IE上了
下面是我的原始碼,把功能獨立到類中了.小弟沒學過C#,程式碼漏洞百出,呵呵.獻醜了.
using System;
using System.IO;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace Pic
...{
/**////
/// MyClass 的摘要說明。
///
public class MyClass
...{
public MyClass()
...{
}
public static string GetMD5String(string password)
...{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5");
}
public static SqlConnection Con = new SqlConnection("server=.;uid=sa;pwd=network;initial catalog=MyHomePage;");
}
public class MyUpLoad
...{
public MyUpLoad(HttpPostedFile UpLoadFile)
...{
Data = UpLoadFile.InputStream;
FileName = UpLoadFile.FileName.ToString();
Length = UpLoadFile.ContentLength;
FileType =FileName.Substring(FileName.LastIndexOf(".")+1);
}
public byte[] GetByte()
...{
Data.Seek(0,SeekOrigin.Begin);
byte[] bdata = new byte[Length];
Data.Read(bdata,0,Length);
return bdata;
}
public string GetID()
...{
Data.Seek(0,SeekOrigin.Begin);
BinaryReader br = new BinaryReader(Data);
char[] cd = new char[Length];
cd = br.ReadChars(Length);
string id = new string(cd);
return MyClass.GetMD5String(id);
}
public bool UpLoadData()
...{
SqlCommand UpLoadCommand = new SqlCommand("Insert into picture(id,data,type,length,time) values(@id,@data,@type,@length,getdate())",MyClass.Con);
UpLoadCommand.Parameters.Add("@id",GetID());
UpLoadCommand.Parameters.Add("@data",GetByte());
UpLoadCommand.Parameters.Add("@type",FileType);
UpLoadCommand.Parameters.Add("@length",Length);
MyClass.Con.Open();
try
...{
UpLoadCommand.ExecuteNonQuery();
MyClass.Con.Close();
return true;
}
catch
...{
MyClass.Con.Close();
return false;
}
}
public int Length;
public string FileName;
public string FileType;
Stream Data;
}
}
MyUpLoad myLoad = new MyUpLoad(myFile.PostedFile);
Response.Write(myLoad.UpLoadData());
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-343198/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在SQL Server中儲存和輸出圖片 (轉)SQLServer
- SQL Server中對圖片進行儲存和輸出SQLServer
- SQL Server 深入解析索引儲存(上)SQLServer索引
- 儲存圖片
- SQL Server 儲存過程的運用SQLServer儲存過程
- 小寫轉大寫金額儲存過程[SQL SERVER]儲存過程SQLServer
- MultipartFile上傳圖片儲存伺服器伺服器
- Python中scrapy下載儲存圖片Python
- Activiti 儲存圖片
- SQL Server 儲存過程SQLServer儲存過程
- 【SQL Server】--儲存過程SQLServer儲存過程
- php圖片上傳之分散式儲存FastDFSPHP分散式AST
- 使用Spark載入資料到SQL Server列儲存表SparkSQLServer
- 幾個實用SQL Server取儲存過程SQLServer儲存過程
- MS SQL Server儲存過程SQLServer儲存過程
- Sql Server系列:儲存過程SQLServer儲存過程
- 解密SQL SERVER儲存過程解密SQLServer儲存過程
- 圖片叢集分散式儲存和負載均衡分散式負載
- 用PHP和MySQL儲存和輸出圖片PHPMySql
- asp.net儲存圖片ASP.NET
- 儲存圖片到SD卡SD卡
- Matlab GUI儲存圖片MatlabGUI
- SQL Server 深入解析索引儲存(中)SQLServer索引
- SQL Server 深入解析索引儲存(堆)SQLServer索引
- SQL Server基礎:儲存過程SQLServer儲存過程
- sql server儲存過程語法SQLServer儲存過程
- SQL Server的datetime儲存格式SQLServer
- SQL server儲存過程函式SQLServer儲存過程函式
- React Native 上傳圖片至七牛雲端儲存React Native
- 前端js儲存頁面為圖片下載到本地前端JS
- 將網站儲存成圖片網站
- SQL Server 深入解析索引儲存(聚集索引)SQLServer索引
- SQL Server基礎之儲存過程SQLServer儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- Laravel 騰訊雲 Cos 物件儲存 sdk 使用示例 上傳圖片Laravel物件
- PHP+七牛雲端儲存上傳圖片程式碼片段PHP
- C# 截圖並儲存為圖片C#
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟