【发布时间】:2010-11-07 23:52:33
【问题描述】:
用户上传文件时,是否可以知道上传的文件是不是图片,
我愿意接受任何解决方案,客户端、服务器端或两者兼而有之,我们会根据情况进行选择。
【问题讨论】:
标签: asp.net javascript image file-upload
用户上传文件时,是否可以知道上传的文件是不是图片,
我愿意接受任何解决方案,客户端、服务器端或两者兼而有之,我们会根据情况进行选择。
【问题讨论】:
标签: asp.net javascript image file-upload
是的,通过检查文件的magic number。
【讨论】:
也许您可以使用以下代码来检查文件是否为图像。
public bool IsFileAnImage(string filePath)
{
try
{
Image image = Image.FromFile(filePath))
}
catch
{
return false;
}
finally
{
image.Dispose();
}
return true;
}
【讨论】:
这可以通过 GD 使用以下函数在服务器端完成:((modified version of this)
function imageFileTypeFromBinary($file)
{
$binary = file_get_contents($file);
if (
!preg_match(
'/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/',
$binary, $hits
)
) {
return 'application/octet-stream';
//return false;
}
static $type = array (
1 => '.jpeg',
2 => '.gif',
3 => '.png',
4 => '.x-windows-bmp',
5 => '.tiff',
6 => '.x-ilbm',
);
return $type[count($hits) - 1];
// or simply return true
// return true;
}
如果你愿意,你可以让它返回 true 或 false,而不是 mime 类型。
【讨论】:
一种简单的方法是查看文件的扩展名。
【讨论】:
*.VBS文件在重命名为*.TXT时只是有趣的阅读。