Мы использовали обработчик файлов IIS для загрузки файлов, хранящихся в базе данных, таких как PowerPoint. Теперь мы пытаемся перейти на webapi. Загрузка файлов работает нормально, но загрузок нет.Vb.net webapi file download troubles
Использование filehandler URL-адрес является как: http://localhost:57851/docmgr?id=6202 который возвращает действительный файл со следующей информацией из Скрипач:
Используя один и тот же код в контроллере WebAPI имеющим Адрес: http://localhost:57851/webapi/file/GetFile?id=6202 возвращает файл с дополнительным байт. Данные Fiddler:
Обратите внимание на изменение типа контента, даже если тип содержимого явно установлен на «application/vnd.ms-powerpoint».
<HttpGet>
Public Function GetFile()
Dim dbConn As New SqlConnection(DigsConnStr)
Dim dbCmd As New SqlCommand
Dim dbRdr As SqlDataReader
Dim id As String = HttpContext.Current.Request.QueryString("id")
Dim bytes As Byte()
Dim contentType As String
Dim fileName As String
Dim fileExt As String
Try
dbConn.Open()
dbCmd.Connection = dbConn
dbCmd.CommandText = "GET_FileForDownload"
dbCmd.CommandType = CommandType.StoredProcedure
dbCmd.Parameters.AddWithValue("@VirtualFileRecID", id)
dbRdr = dbCmd.ExecuteReader
dbRdr.Read()
contentType = dbRdr("ContentType")
bytes = dbRdr("FileBytes")
fileExt = dbRdr("FileExtension")
If contentType <> "" Then
fileName = dbRdr("Title") & fileExt
HttpContext.Current.Response.ContentType = contentType
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName)
HttpContext.Current.Response.BinaryWrite(bytes)
'HttpContext.Current.Response.Flush()
End If
dbConn.Close()
Catch ex As Exception
dbConn.Close()
Finally
If Not (dbConn Is Nothing) Then dbConn.Close()
End Try
End Function
я преобразовал свой код, используя ваше предложение использовать HttpResponseMessage и получить тип содержимого и поток из базы данных, и он прекрасно работает. Большое спасибо! – JoelCool