【发布时间】: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