【问题标题】:HTML upload form not recognising RAW format as images, using 'application/octet-stream' instead. How do I validate?HTML 上传表单无法将 RAW 格式识别为图像,而是使用“application/octet-stream”。如何验证?
【发布时间】:2020-06-10 08:52:45
【问题描述】:

我正在创建一个上传屏幕,允许用户上传 RAW 格式的图像。有多种 RAW 格式,我有一个预定义的列表。

define ('ALLOWED_FILE_TYPE', array(
    "image/jpeg", 
    "image/jpg", 
    "image/tif", 
    "image/png", 
    "image/bmp", 
    "image/x-canon-cr2",
    "image/x-canon-crw", 
    "image/x-kodak-dcr",  
    "image/x-nikon-nef", 
    "image/x-olympus-orf", 
    "image/x-sony-arw",
    "image/x-adobe-dng",
    "image/x-epson-erf",
    "image/x-kodak-k25",
    "image/x-kodak-kdc",
    "image/x-minolta-mrw",
    "image/x-pentax-pef",
    "image/x-fuji-raf",
    "image/x-panasonic-raw",
    "image/x-sony-sr2",
    "image/x-sony-srf",
    "image/x-sigma-x3f"
    ));

(我在stackoverflow上找到了这个列表。我没有机会检查它的真实性。)

我的脚本是一个标准的上传表单,它调用了一个方法来检查上传文件类型。不幸的是,对于 RAW 文件,返回的文件类型是 'application/octet-stream':

array (
  'name' => 'DSCF0450.RAF',
  'type' => 'application/octet-stream',
  'tmp_name' => '/private/var/tmp/phpVFT8BJ',
  'error' => 0,
  'size' => 50560000,
)

显然,未将 RAW 文件识别为图像。

谁能告诉我为什么?

我是否必须将上传表单的编码类型更改为 enctype="multipart/form-data" 以外的其他内容?

谁能告诉我如何将原始文件识别为图像?

注:

处理图像不是问题。我正在尝试验证上传。

我已经尝试使用 finfo 和 finfo_file 来获取文件类型(它也返回“application/octet-stream”)。

我知道我可以获取文件扩展名并对其进行检查。我宁愿不依赖可以轻易改变的东西,除非我必须这样做。

提前致谢。

【问题讨论】:

    标签: html validation upload


    【解决方案1】:

    谁能告诉我为什么?

    上传文件的内容类型由客户端提供。它被报告为application/octet-stream(即某些字节的数据格式无法识别),因为浏览器/操作系统没有上传它无法识别文件类型。

    我是否必须将上传表单 enctype 更改为 enctype="multipart/form-data" 以外的其他内容?

    没有。为文件报告的内容类型是为上传的部分指定的(由多个部分表单数据组成)。 p>

    谁能告诉我如何将原始文件识别为图像?

    只需对访问您网站的每个浏览器进行更改(除非在非常特殊的情况下,否则这是不切实际的),您不能。至少现在不是。

    我正在尝试验证上传。

    通过信任 客户端发送的内容类型标头 isn't safe anyway 来验证文件是否为图像。

    我已经尝试使用 finfo 和 finfo_file 来获取文件类型(它也返回“application/octet-stream”)。

    可能出于同样的原因,客户无法识别它。 RAW 文件显然是非标准的。

    处理图像不是问题。

    那么你用来处理它的工具可能是确定它是否是你想要的数据类型的最佳方法。

    【讨论】:

    • 感谢@Quentin,很高兴知道。你给了我一个想法。我将在提交时检查文件扩展名(以检查没有人意外上传非图像文件)并且在服务器端,我将检查该文件实际上是一个图像(以防有人足够香蕉重命名 .doc 文件.png!)希望这将是足够的验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2011-10-18
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2019-06-22
    相关资源
    最近更新 更多