确定MAC上传流文件的MIME类型

我有一个简单的Web表单,通过.NET C#发送和发送电子邮件。 另外还有一个ASP UPLOAD ctrl,我从中创建一个内存流并将流附加到邮件消息…即不需要将文件保存到文件系统。

问题:当MAC用户不对其上传的文件进行扩展时(我正在测试PostedFile.ContentType以确定文件和/或适当的扩展名,允许的文件RTF,TXT,PDF,DOC,DOCX),看起来ContentType又回来了“application / octet”……这对我来说没有PC的要求,但对我来说是有意义的; 仍然不清楚天气读取ContentType或扩展是一种更好的方法来确定我附加之前它是什么类型的文件。 [无扩展MAC文件显然会失败任何扩展测试]

基本上,我从上传ctrl中读取文件,确定它的ContentType是什么,只删除PostedFile.Filename,然后在我使用switch语句中的ContentType字符串创建附件时重新组合,以确定并向附加文件添加正确的扩展名(filename + ext)。 我这样做是为了确保不使用扩展的MAC用户仍然无需上传创建.ZIP或其他包。

问题1:关于解决这个问题,最佳做法,我的逻辑是否正确? 问题2:当不在MAC上使用扩展时,所有MAC文件是否将返回为“application / octect”,如果是,那么有人如何确定它实际上是什么类型的文件? (注意:在MAC平台上不使用扩展时,PDF工作正常)。

提前致谢。 如果需要代码示例请告知。

不要使用文件扩展来计算MIME类型,而是使用“Winista”进行二进制分析,如果winista无法解决问题,请参阅我的方法返回到URLMon http://social.msdn.microsoft.com/Forums/ EN-US / Vsexpressvcs /线程/ d79e76e3-b8c9-4fce-a97d-94ded18ea4dd

假设有人用jpg扩展名重命名一个exe …你仍然可以确定“真正的”文件格式。 它不会检测swf或flv,但几乎所有其他众所周知的格式+你可以得到一个hex编辑器并添加它可以检测的更多文件。

编辑:下载Winista: http : //www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx

这个问题给了我一个好主意,因为你希望附加一个可以安全地在MAC和PC上运行的文件扩展我/你可以编辑mime-types.xml文件以包含可用于打开特定文件类型的安全文件扩展名在MAC和PC上。