My WPF application gets a file from the user with Microsoft.Win32.OpenFileDialog()…
Private Sub ButtonUpload_Click(...) Dim FileOpenStream As Stream = Nothing Dim FileBox As New Microsoft.Win32.OpenFileDialog() FileBox.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) FileBox.Filter = 'Pictures (*.jpg;*.jpeg;*.gif;*.png)|*.jpg;*.jpeg;*.gif;*.png|' & _ 'Documents (*.pdf;*.doc;*.docx;)|*.pdf;*.doc;*.docx;|' & _ 'All Files (*.*)|*.*' FileBox.FilterIndex = 1 FileBox.Multiselect = False Dim FileSelected As Nullable(Of Boolean) = FileBox.ShowDialog(Me) If FileSelected IsNot Nothing AndAlso FileSelected.Value = True Then Try FileOpenStream = FileBox.OpenFile() If (FileOpenStream IsNot Nothing) Then Dim ByteArray As Byte() Using br As New BinaryReader(FileOpenStream) ByteArray = br.ReadBytes(FileOpenStream.Length) End Using Dim z As New ZackFile z.Id = Guid.NewGuid z.FileData = ByteArray z.FileSize = CInt(ByteArray.Length) z.FileName = FileBox.FileName.Split('\').Last z.DateAdded = Now db.AddToZackFile(z) db.SaveChanges() End If Catch Ex As Exception MessageBox.Show('Cannot read file from disk. ' & Ex.Message, 'Fail', MessageBoxButton.OK, MessageBoxImage.Error) Finally If (FileOpenStream IsNot Nothing) Then FileOpenStream.Close() End If End Try End If End Sub
And my ASP.NET MVC application serves it up for download at a web site with FileStreamResult()…
Public Class ZackFileController Inherits System.Web.Mvc.Controller Function Display(ByVal id As Guid) As FileStreamResult Dim db As New EfrDotOrgEntities Dim Model As ZackFile = (From z As ZackFile In db.ZackFile _ Where z.Id = id _ Select z).First Dim ByteArray As Byte() = Model.ImageData Dim FileStream As System.IO.MemoryStream = New System.IO.MemoryStream(ByteArray) Dim ContentType As String = ????? Dim f As New FileStreamResult(FileStream, ContentType) f.FileDownloadName = Model.FileName Return f End Function End Class
But FileStreamResult() needs a content type string. How do I know the correct content type of my file?
I’ve replaced the FileExtension column in my database table with a ContentType column.
I populate it when I upload a file.
I determine the content type with this function:
This works, but it seems inelegant.