【问题标题】:Determining MIME Type of MAC upload stream file确定 MAC 上传流文件的 MIME 类型
【发布时间】:2012-02-02 19:47:31
【问题描述】:

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

问题:当 MAC 用户未在其上传的文件中包含扩展名时(我正在测试 PostedFile.ContentType 以确定文件和/或适当的扩展名、允许的文件 RTF、TXT、PDF、DOC、DOCX),看起来像 ContentType以“应用程序/八位字节”的形式返回……这对我来说很有意义,没有 PC 要求的扩展,但是;仍然不清楚天气读取 ContentType 或扩展名是在我附加之前确定它是什么类型的文件的更好方法。 [无扩展的 MAC 文件显然无法通过任何扩展测试]

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

问题 1:关于处理这个问题,我的逻辑是否合理,最佳实践? 问题 2:当不在 MAC 上使用扩展名时,所有 MAC 文件都会返回为“application/octect”吗?如果是这样,有人如何确定它到底是什么类型的文件? (注意:在 MAC 平台上不使用扩展时,PDF 工作正常)。

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

【问题讨论】:

  • ContentType 由上传文件的客户端设置,不保证上传文件的正确类型。文件扩展名也不是这个问题。为什么你需要知道文件是什么类型?您是否需要根据类型运行一些工作流程?还是直接保存?
  • 除非您有某种方式知道 .DOC 与 .DOCX 与 .TXT 的区别,如果他们忘记了扩展名.. 嗯,我可能会更改逻辑以确保在他们上传之前如果没有文件 ext 或基本上有允许类型的文件管理器,则将过滤器添加到上传代码中的文件。否则不允许上传...并且 pdf 可能工作正常,因为内容类型与 acatual 文件类型匹配..但是还有多少其他情况可以使用或不使用..??
  • Arkain:基本上,我的目标是将文件作为附件保存到电子邮件中。其次,应用程序生成的电子邮件和/或附件将被邮寄给 PC 用户和 MAC 平台用户......所以考虑到这一点,我试图找到一个共同点(安全网),对我来说总是附加使用 .EXT 的文件,对于不包含扩展名的 MAC 用户,这使得这个 excersize 充其量是困难的,因为你所说的是 ContentType 在这种情况下实际上是一个“废话拍摄”,或者除非我比较字节顺序到一些外部库等。
  • DJ:基本上我的想法是这样的......如果 PostedFile.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" 那么在将文件附加到电子邮件时这样做......文件名 + “.DOCX”这是我的假设,如果 ConentType 是某个字符串,那么我可以向文件添加扩展名,以允许客户端机器找到合适的应用程序来打开文件(如果可用)
  • DJ:那么,如果不使用文件名中的 ContentType 或 .EXT,您将如何测试允许的类型?我确实有允许的内容类型: allowedContentTypes = { "application/pdf", "text/plain", "application/msword", "text/rtf", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" };跨度>

标签: c# .net macos upload mime-types


【解决方案1】:

不要使用文件扩展名来计算 MIME 类型,而是使用“Winista”进行二进制分析,请参阅我的方法here,如果 winista 无法解决,则求助于 URLMon 最后一个答案 http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d79e76e3-b8c9-4fce-a97d-94ded18ea4dd

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

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

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

【讨论】:

  • 尝试了 Winista 库,在识别字节方面“做得更好”,但仍然(不幸)返回 .DOCX 作为 .ZIP ...我得到了,但仍然没有达到“最佳”实现但肯定“更好”
猜你喜欢
  • 2012-03-16
  • 2015-10-22
  • 1970-01-01
  • 2013-04-21
  • 2011-06-09
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多