Zac*_*son 11 .net file-io content-type file mime-types
我的WPF应用程序从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
Run Code Online (Sandbox Code Playgroud)
我的ASP.NET MVC应用程序使用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
Run Code Online (Sandbox Code Playgroud)
但是FileStreamResult()需要一个内容类型字符串.我如何知道我的文件的正确内容类型?
Zac*_*son 14
我用ContentType列替换了数据库表中的FileExtension列.
我上传文件时填充它.
Private Sub ButtonUpload_Click(...)
...
Dim FileExtension As String = "." + FileBox.FileName.Split(".").Last.ToLower
z.ContentType = ContentType(FileExtension)
...
End Sub
Run Code Online (Sandbox Code Playgroud)
我用这个函数确定内容类型:
Function ContentType(ByVal FileExtension As String) As String
Dim d As New Dictionary(Of String, String)
'Images'
d.Add(".bmp", "image/bmp")
d.Add(".gif", "image/gif")
d.Add(".jpeg", "image/jpeg")
d.Add(".jpg", "image/jpeg")
d.Add(".png", "image/png")
d.Add(".tif", "image/tiff")
d.Add(".tiff", "image/tiff")
'Documents'
d.Add(".doc", "application/msword")
d.Add(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
d.Add(".pdf", "application/pdf")
'Slideshows'
d.Add(".ppt", "application/vnd.ms-powerpoint")
d.Add(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation")
'Data'
d.Add(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
d.Add(".xls", "application/vnd.ms-excel")
d.Add(".csv", "text/csv")
d.Add(".xml", "text/xml")
d.Add(".txt", "text/plain")
'Compressed Folders'
d.Add(".zip", "application/zip")
'Audio'
d.Add(".ogg", "application/ogg")
d.Add(".mp3", "audio/mpeg")
d.Add(".wma", "audio/x-ms-wma")
d.Add(".wav", "audio/x-wav")
'Video'
d.Add(".wmv", "audio/x-ms-wmv")
d.Add(".swf", "application/x-shockwave-flash")
d.Add(".avi", "video/avi")
d.Add(".mp4", "video/mp4")
d.Add(".mpeg", "video/mpeg")
d.Add(".mpg", "video/mpeg")
d.Add(".qt", "video/quicktime")
Return d(FileExtension)
End Function
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎不够优雅.
我根据 Zacks 响应制作了一个 C# 帮助程序类。
/// <summary>
/// Helps with Mime Types
/// </summary>
public static class MimeTypesHelper
{
/// <summary>
/// Returns the content type based on the given file extension
/// </summary>
public static string GetContentType(string fileExtension)
{
var mimeTypes = new Dictionary<String, String>
{
{".bmp", "image/bmp"},
{".gif", "image/gif"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".png", "image/png"},
{".tif", "image/tiff"},
{".tiff", "image/tiff"},
{".doc", "application/msword"},
{".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
{".pdf", "application/pdf"},
{".ppt", "application/vnd.ms-powerpoint"},
{".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
{".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{".xls", "application/vnd.ms-excel"},
{".csv", "text/csv"},
{".xml", "text/xml"},
{".txt", "text/plain"},
{".zip", "application/zip"},
{".ogg", "application/ogg"},
{".mp3", "audio/mpeg"},
{".wma", "audio/x-ms-wma"},
{".wav", "audio/x-wav"},
{".wmv", "audio/x-ms-wmv"},
{".swf", "application/x-shockwave-flash"},
{".avi", "video/avi"},
{".mp4", "video/mp4"},
{".mpeg", "video/mpeg"},
{".mpg", "video/mpeg"},
{".qt", "video/quicktime"}
};
// if the file type is not recognized, return "application/octet-stream" so the browser will simply download it
return mimeTypes.ContainsKey(fileExtension) ? mimeTypes[fileExtension] : "application/octet-stream";
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您可能希望保留该活动mimeTypes以供将来查询。这只是一个起点。