如何在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
這次我們來看看怎麼把檔案上傳到資料庫中,這邊需要注意一個小地方,在上傳檔案到資料庫的部分,資料欄位的性態若是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
留言
雖然您這的資料還不算多..
不過卻很有幫助..
希望您能多多分享更多ASP.NET的教學..
感謝您的分享!!
但其實我是想知 上載完之後,
怎樣才能讓人好像 論壇 那樣
即時可以看到已上載的東西?
我想即時在網頁附加 上載的物件
我開 download.aspx 傳回了錯誤
查詢運算式 'uid=' 中的 語法錯誤 (少了運算元)。
行 7: Dim dv As Data.DataView = Me.AccessDataSource1.Select(New DataSourceSelectArguments)
沒有複製 web.config 有關嗎?
因為我原來已有, 怕取代會發生問題
此範例必須提供檔案編號做為URL中的命令列參數
我想要以檔名作為URL參數,但是我是了很多次都無法成功,在此想請教該如何做修改呢