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