將使用者上傳的檔案直接儲存於資料庫(而非檔案系統)是常見需求。本文說明資料表結構、預存程序與上傳程式碼的完整實作步驟。
建立 tblBooksUpload 表:
CREATE TABLE tblBooksUpload
(
DocID int NOT NULL IDENTITY PRIMARY KEY,
DocTitle varchar(200),
Doc image,
DocType varchar(50),
Entrydate datetime DEFAULT GETDATE()
)
欄位說明:
image 型別,儲存二進位檔案內容。application/pdf、image/jpeg),供瀏覽器正確呈現。CREATE PROCEDURE uSP_BooksUploadFile
@Title varchar(200),
@Doc image,
@DocType varchar(50)
AS
INSERT INTO tblBooksUpload (DocTitle, Doc, DocType)
VALUES (@Title, @Doc, @DocType)
GO
<input type="file" /> 讓使用者選擇檔案。FileUpload 控制項的 PostedFile.InputStream 讀取位元組陣列。SqlCommand 設定參數型別為 SqlDbType.Image 執行插入。protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
byte[] fileData = FileUpload1.FileBytes;
string fileName = FileUpload1.FileName;
string mimeType = FileUpload1.PostedFile.ContentType;
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand("uSP_BooksUploadFile", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Title", fileName);
cmd.Parameters.Add("@Doc", SqlDbType.Image).Value = fileData;
cmd.Parameters.AddWithValue("@DocType", mimeType);
conn.Open();
cmd.ExecuteNonQuery();
}
lblMsg.Text = "上傳成功!";
}
}
image 型別在 SQL Server 2005+ 建議改用 varbinary(max)。DocType 設定 Response.ContentType,再用 Response.BinaryWrite 輸出。