c# - 如何跨操作系统接受具有指定内容类型的文件

标签 c# asp.net file-upload content-type

因为我正在尝试上传一个文件,并且我正在尝试检查它们的扩展名,因为我知道这不是一个好的做法,所以这是我正在做的代码。它工作正常,但由于我在 Apple Mac 用户中遇到问题,他们无法上传 pdf 文件。

   if (upload1.HasFile)
      {
       Finfo = new FileInfo(upload1.PostedFile.FileName);
       if (Finfo.Extension.ToLower() == ".docx" || Finfo.Extension.ToLower() == ".doc" || Finfo.Extension.ToLower() == ".xls" ||
                            Finfo.Extension.ToLower() == ".xlsx" || Finfo.Extension.ToLower() == ".pdf" || Finfo.Extension.ToLower() == ".jpg" ||
                            Finfo.Extension.ToLower() == ".png" || Finfo.Extension.ToLower() == ".gif" || Finfo.Extension.ToLower() == ".txt" ||
                            Finfo.Extension.ToLower() == ".mp4" || Finfo.Extension.ToLower() == "ppt" || Finfo.Extension.ToLower() == ".bmp" ||
                            Finfo.Extension.ToLower() == ".swf" || Finfo.Extension.ToLower() == ".rm" || Finfo.Extension.ToLower() == ".pptx")
        {
           // Accept File 
        }
}

现在我想我会使用这段代码,这样它就能解决问题

if (
        upload1.PostedFile.ContentType == "text/rtf" ||
        upload1.PostedFile.ContentType == "application/doc" ||
        upload1.PostedFile.ContentType == "appl/text" ||
        upload1.PostedFile.ContentType == "application/vnd.msword" ||
        upload1.PostedFile.ContentType == "application/vnd.ms-word" ||
        upload1.PostedFile.ContentType == "application/winword" ||
        upload1.PostedFile.ContentType == "application/word" ||
        upload1.PostedFile.ContentType == "application/msword" ||       
        upload1.PostedFile.ContentType == "application/x-msw6" ||
        upload1.PostedFile.ContentType == "application/x-msword" ||
        upload1.PostedFile.ContentType == "application/pdf" ||
                        FileUpload1.PostedFile.ContentType == "application/x-pdf" ||
        upload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
        upload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.template"
        )

这是接受用户文件的好方法吗?我需要允许除 EXE、DMG、DLL、CS、SQL、BAT、.我如何确保它适用于所有操作系统。

  • Apple 用户可以使用 OpenOffice 或其他一些软件上传。所以我们也需要允许这种类型的文件

谁能告诉我如何处理这种情况

最佳答案

内容类型基本上由客户端决定,但大多数客户端可能不会发送内容类型,在这种情况下检查扩展名只是验证文件类型的最佳方式。或者你应该检查两者。我们确实遇到了一些没有发送内容类型的 Mac 客户端的问题。

如果两者都没有,您将不得不检查文件的几个初始字节以检查其类型。

内容类型是个坏主意,因为如果用户没有安装相应的软件,操作系统将发送错误的内容类型。

关于c# - 如何跨操作系统接受具有指定内容类型的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799166/

相关文章:

c# - 从 ASP.NET WEB API 调用 Angular 路由

c# - Linq-to-Sql:使用 LinqDataSource 以编程方式检索数据

php - $_FILE ["file"] ["name"] 中的相对路径被截断为基本名称?

c# - 在wpf中绘制垂直线

c# - 如何查找和配置 SSIS 包所需的参数以从代码中执行它们

c# - 无法将 list<T> 传输到 Web 服务?

java - 如何预览图像而不将其保存到文件系统?(JSF 2.0)

java - selenium 如何测试它是否具有对文件的读取访问权限

c# - Visual Studio 找不到 SingleInstanceFactory

c# - 如何防止我的文本框在回发时清除文本。