【发布时间】:2017-02-16 18:44:26
【问题描述】:
我有一个 ASP.NET Core 应用程序,我需要验证上传的文件是图像而不是具有图像扩展名的非图像文件...... 我找到并有意义的所有解决方案都使用 System.Drawing.Image 或 ASP.NET Core 中不可用的类似类。 你能建议一个替代方案吗? *请注意,我不是在检查扩展名,而是检查内容。
谢谢
【问题讨论】:
标签: c# asp.net asp.net-core
我有一个 ASP.NET Core 应用程序,我需要验证上传的文件是图像而不是具有图像扩展名的非图像文件...... 我找到并有意义的所有解决方案都使用 System.Drawing.Image 或 ASP.NET Core 中不可用的类似类。 你能建议一个替代方案吗? *请注意,我不是在检查扩展名,而是检查内容。
谢谢
【问题讨论】:
标签: c# asp.net asp.net-core
现在“System.Drawing.Common”NuGet 可用于 .NET Core。
您可以执行以下操作来验证“可能的”图像:
using System.Drawing;
// ...
public bool IsImage(byte[] data)
{
var dataIsImage = false;
using (var imageReadStream = new MemoryStream(data))
{
try
{
using (var possibleImage = Image.FromStream(imageReadStream))
{
}
dataIsImage = true;
}
// Here you'd figure specific exception to catch. Do not leave like that.
catch
{
dataIsImage = false;
}
}
return dataIsImage;
}
【讨论】:
如果您有权限在服务器上运行可执行文件,您可以使用 imagemagick 的 identify 命令。工作量很大。你需要在服务器上安装 imagemagick 并且需要有运行可执行文件的权限。
https://www.imagemagick.org/script/identify.php
您需要调用该程序并将图像文件提供给它
如何在c#中调用exe文件:https://msdn.microsoft.com/en-us/library/0w4h05yb(v=vs.110).aspx
【讨论】: