我有一个ASP.NET核心应用程序,我需要验证上传的文件是图像,而不是非图像文件,它有一个图像扩展名.... 我发现的所有解决方案都适用于System.Drawing.Image或类似的类,它们在ASP.NET Core中不可用。 你能否提出一个替代方案? *请注意,我没有试图检查延期,但内容。在ASP.Net验证IFormFile的图像类型核心
谢谢
我有一个ASP.NET核心应用程序,我需要验证上传的文件是图像,而不是非图像文件,它有一个图像扩展名.... 我发现的所有解决方案都适用于System.Drawing.Image或类似的类,它们在ASP.NET Core中不可用。 你能否提出一个替代方案? *请注意,我没有试图检查延期,但内容。在ASP.Net验证IFormFile的图像类型核心
谢谢
,如果你有特权,你可以使用ImageMagick的标识命令的服务器上运行的可执行文件。这是很多工作。你需要在服务器上安装imagemagick,并且需要有权限运行可执行文件。
https://www.imagemagick.org/script/identify.php
你需要调用程序并给出该图像文件将其
如何调用在C#中的EXE文件:https://msdn.microsoft.com/en-us/library/0w4h05yb(v=vs.110).aspx
我真的需要一种方式在C#代码.... – Techy
你可以查看这个post,我试过了..
// declare FindMimeFromData from urlmon.dll
[DllImport(@"urlmon.dll", CharSet = CharSet.Unicode)]
private extern static System.UInt32 FindMimeFromData(System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
System.UInt32 cbSize,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out System.IntPtr ppwzMimeOut,
System.UInt32 dwReserverd
);
// you can return boolen value if mime type is not image
public static string getMimeFromFile(IFormFile file)
{
byte[] buffer = new byte[256];
using (Stream fs = file.OpenReadStream())
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
try
{
//System.UInt32 mimetype;
IntPtr mimetype = Marshal.AllocHGlobal(256);
FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
//System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimetype);
Marshal.FreeCoTaskMem(mimetype);
return mime;
}
catch (Exception e)
{
return "unknown/unknown";
}
}
[HttpGet]
public ActionResult Test()
{
ViewData["Message"] = "Your test page.";
return View();
}
[HttpPost]
public ActionResult Test(IFormFile file)
{
string mimeType = getMimeFromFile(file);
ViewData["Message"] = mimeType;
return View();
}
和Test.cshtml
<h3>@ViewData["Message"]</h3>
<form action="/Home/Test" method="post" enctype="multipart/form-data">
<input name="file" type="File"> <br>
<input type="submit" value="submit">
</form>
UPDATE:
如果你相信一个问题要回答的另一个问题的答案,唐不要复制上述问题的答案,而是将此问题标记为重复。但这是关于ASP.NET Core的,前提是它可以在任何运行时运行。通过涉及平台调用,您否定了这一点。 – CodeCaster
@CodeCaster它不复制粘贴。在谈论它之前请阅读代码 – levent
我需要它来接受所有图像请 – Techy
http://stackoverflow.com/questions/3643750/net-image-libraries –