Function Download(id As Integer) As ActionResult
Using db As New FilesEntities
' 取得檔案資訊
Dim getfile = (From f In db.FileDown Where f.FileId = id Select f).FirstOrDefault()
If getfile.FileName IsNot Nothing Then
Dim FilePath As String = Server.MapPath("~/Files/" & getfile.FileName)
' 進行下載
If System.IO.File.Exists(FilePath) Then
Return File(FilePath, getfile.FileType, getfile.FileName)
End If
Else
' 回應錯誤
Return Content("無法下載檔案!")
End If
End Using
Return RedirectToAction("Index")
End Function
一般而言,id 會是主鍵(PK),那如果我不想使用主鍵可不可以,也是可以,你只需要把LINQ那段語法修改一下即可,例如,我想使用檔案名稱來下載:
' 記得要傳入name 參數 Function DownloadByName(name As String) As ActionResult Dim getfile = (From f In db.FileDown Where f.FileName = name Select f).FirstOrDefault() ' 其他一樣
不過像id, name 這種都很好猜,我可以手動輸入就可以把檔案下載回來。如果是這樣,那我們還可以使用GUID來讓使用者下載。
' 記得guid 型別是 Guid Function DownloadByGuid(guid As Guid) As ActionResult Dim getfile = (From f In db.FileDown Where f.rowguid= guid Select f).FirstOrDefault() ' 其他一樣
另外,為確保傳入為Guid,再加強一下程式:
Function DownloadByGuid(guid As String) As ActionResult Dim parseGuid As Guid = System.Guid.Parse(guid) Dim getfile = (From f In db.FileDown Where f.rowguid= guid Select f).FirstOrDefault()
經過 Guid.Parse() 的好處是,我可以使用Try ... Catch 直接進行錯誤處理。最後程式修改為:
Function DownloadByGuid(guid As String) As ActionResult Try Dim parseGuid As Guid = System.Guid.Parse(guid) Dim getfile = (From f In db.FileDown Where f.rowguid= guid Select f).FirstOrDefault() If getfile.FileName IsNot Nothing Then Dim FilePath As String = Server.MapPath("~/Files/" & getfile.FileName) ' 存在,進行下載 If System.IO.File.Exists(FilePath) Then Return File(FilePath, getfile.FileContentType, getfile.FileName) End If End If Catch ex As ArgumentNullException ViewBag.Message = ex.Message Catch ex As FormatException ViewBag.Message = ex.Message Catch ex As Exception ViewBag.Message = ex.Message End Try Return RedirectToAction("Index") End Function
下載網址會是這樣:「http://localhost:15454/File/DownloadByGuid?guid=aeb238f8-d339-4997-bd9b-111c60906a15」,先把guid當成String,然後System.Guid.Parse(guid) 轉換為 Guid型別,成功才進行 LINQ 查詢,有資料就下載。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。