如何在ASP.NET中上傳檔案到資料庫

上回談到了如何下載檔案,包含資料庫中的檔案,動態產生的檔案...等。
這次我們來看看怎麼把檔案上傳到資料庫中,這邊需要注意一個小地方,在上傳檔案到資料庫的部分,資料欄位的性態若是Access請選擇Ole物件,若是SQL Server請選擇Image格式。

接著您可以透過底下的程式碼進行檔案的上傳:

If Me.FileUpload1.PostedFile.ContentLength > 0 Then
  Dim cn As New Data.OleDb.OleDbConnection
  Dim dc As Data.OleDb.OleDbCommand
  Dim para As Data.OleDb.OleDbParameter
  Dim SQL, FileName As String
 
 '連線字串
  cn.ConnectionString = Me.AccessDataSource1.ConnectionString
  cn.Open()
  
'執行 TextBox 中的 SQL 指令
  FileName = Me.FileUpload1.PostedFile.FileName
  SQL = "insert into FileStorage (FileName,FileBody) values ('" & FileName & "',?)"
  
'建立 SqlCommand 物件
  dc = New Data.OleDb.OleDbCommand(sql, cn)
  para = New Data.OleDb.OleDbParameter("file", Data.OleDb.OleDbType.Binary)
  para.Value = Me.FileUpload1.FileBytes
  dc.Parameters.Add(para)
  
'執行(透過 Parameters 將檔案儲存到資料庫)
  dc.ExecuteNonQuery()
  ShowAlertMsg("上傳檔案儲存完畢!")
Else
  ShowAlertMsg("上傳檔案不存在!")
End If


  上傳至資料庫中的檔案,可以透過底下的方式重新下載回來,請特別這注意這張網頁在叫用的時候必須提供檔案編號做為URL中的命令列參數:

  Me.AccessDataSource1.SelectCommand = "select * from FileStorage where uid=" & Request.QueryString("FileID")
  Dim dv As Data.DataView = Me.AccessDataSource1.Select(New DataSourceSelectArguments)
  
'準備下載檔案
  Response.ClearHeaders()
  Response.Clear()
  Response.Expires = 0
  Response.Buffer = True
  Dim fileName As String = dv.Item(0).Item("FileName")
  
'透過 Header 設定檔名
  Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(IO.Path.GetFileName(fileName), System.Text.Encoding.UTF8) & Chr(34))
  Response.ContentType = "Application/octet-stream"
  
'傳出要讓使用者下載的內容
  Response.BinaryWrite(dv.Item(0).Item("FileBody"))
 
 '釋放資源
  Response.End()


整個範例請參考:
http://video.studyhost.com/Download/Example/ASP.NET/FileUploadAndDownloadWithDB.rar

留言

Unknown寫道…
太感謝你了, 雖然你的code我不太了解,但是例子非常好用,真幸運有找到你,謝謝!
匿名表示…
感謝你提供很好的範例程式, 我已經下載執行過了, 程式碼再研究看看, 希望能學會. 也希望你能多多提供這方面的資訊 ^^
匿名表示…
最近正在學習ASP.NET 2.0
雖然您這的資料還不算多..
不過卻很有幫助..
希望您能多多分享更多ASP.NET的教學..
感謝您的分享!!
匿名表示…
上載檔案好好用
但其實我是想知 上載完之後,

怎樣才能讓人好像 論壇 那樣
即時可以看到已上載的東西?

我想即時在網頁附加 上載的物件

我開 download.aspx 傳回了錯誤

查詢運算式 'uid=' 中的 語法錯誤 (少了運算元)。
行 7: Dim dv As Data.DataView = Me.AccessDataSource1.Select(New DataSourceSelectArguments)

沒有複製 web.config 有關嗎?
因為我原來已有, 怕取代會發生問題
匿名表示…
請問上傳後的檔案跑去那裡了呢?網頁資料夾裡都沒有。
匿名表示…
你好

此範例必須提供檔案編號做為URL中的命令列參數

我想要以檔名作為URL參數,但是我是了很多次都無法成功,在此想請教該如何做修改呢

這個網誌中的熱門文章

原來使用 .net 寫個 MCP Server 如此簡單

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

開啟 teams 中的『會議轉錄(謄寫)』與Copilot會議記錄、摘要功能

在VS Code當中使用 Azure DevOps MCP Server

原來使用 .net 寫個 MCP Client 也如此簡單