【问题标题】:jQuery or JavaScript: get MIME type of client filejQuery 或 JavaScript:获取客户端文件的 MIME 类型
【发布时间】:2011-06-02 15:37:59
【问题描述】:

我想使用 jQuery 或 JavaScript 在我的应用程序客户端检测文件的 MIME 类型。有没有办法做到这一点? 谢谢。

【问题讨论】:

    标签: javascript jquery mime-types


    【解决方案1】:

    您可以使用 AJAX,发出 HEAD 请求,并检查 Content-type 标头的响应标头。但这仅在您从 HTTP 服务器获取文件时才有效。


    要获取使用 HTML 文件选择器选择的文件的 MIME 类型,而不提交任何内容,请尝试:

    document.getElementById('fileChooserID').files[0].type // e.g. image/png
    

    示例

    http://jsbin.com/akati3/2

    尝试选择一张图片,检查 MIME 类型,然后尝试提交。然后尝试其他不是图像的东西。

    【讨论】:

    • 那么,你的意思是:允许用户在文件选择器中选择一个文件,但是,在不发送任何内容的情况下,确定 MIME 类型?我将编辑我的答案以允许这样做。
    • 对不起,我想我解释得不够好。用户输入以 file:// 开头的图像的 url,图像使用 标签显示在页面上。我想知道 MIME 类型,以便确保它是有效的图像。
    • 哦,当然,我的第二个答案正是您想要的。给我几分钟;我会写一个演示。
    • 唯一的问题是我没有使用文件输入,而是 url 的文本框,有点像浏览器中的 url 框。
    • 如果您使用文本框,出于安全原因,浏览器不会公开有关文件名的任何信息(甚至将其视为文件条目)。我知道从浏览器获取此类信息的唯一方法是使用文件输入和一些 JavaScript。
    【解决方案2】:

    可靠检测 mime 类型的唯一方法是在服务器端解析文件,确认它是用户声称的类型,或者它适合列表允许的类型。需要考虑的事项:

    1 - JavaScript 对本地文件系统的访问受到限制,这是有充分理由的。

    2 - 您不能信任从浏览器接收到的 mime 类型。它不一定与发送文件的 mime 类型匹配。

    3 - 在允许用户上传适合允许类型的“白名单”的文件的情况下,无论如何都可能需要验证 - 考虑到应用程序可能必须对文件进行实际操作,而不是存储它们,这至少会涉及解析它们的标题以获取信息,例如运行长度(对于视频)版本号(对于 Word 文档)等等。

    【讨论】:

    • 确实如此。想要欺骗服务器的半聪明用户可能会欺骗 MIME 类型。服务器应始终通过魔术仔细检查文件类型。
    【解决方案3】:

    这个想法不信任浏览器..这个想法是在服务器端执行此验证,但是,如果在向浏览器发送 20MB 文件之前因为服务器中的一条规则而被拒绝,那将是多么有用的事情。 .so,如果该文件“是候选”要上传,最好“预先检查”,最终验证将在服务器中执行。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2018-12-01
      • 1970-01-01
      • 2018-07-10
      • 2014-05-19
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多