我担心此重载中的第三个参数validateImageData。该文档没有对此做太多解释,仅说明它导致图像数据得到验证,但没有详细信息,究竟要执行哪些操作来验证图像数据?
public static Image FromStream (
Stream stream,
bool useEmbeddedColorManagement,
bool validateImageData
)
我想在Web应用程序中使用它,所以,我想知道如果将validateImageData设置为true,将会发生什么,我想确保用户上传的是有效图像,建议将validateImageData设置为true。还是引发一个异常足以捕获异常?另外,可以将validateImageData设置为true可以以任何方式影响性能吗? (用户可以上传最大为250k的图片)
谢谢
最佳答案
从Reflector,我们看到:
if (validateImageData)
{
num = SafeNativeMethods.Gdip.GdipImageForceValidation(new HandleRef(null, zero));
if (num != 0)
{
SafeNativeMethods.Gdip.GdipDisposeImage(new HandleRef(null, zero));
throw SafeNativeMethods.Gdip.StatusException(num);
}
}
因此,我们看到GdipImageForceValidation被调用了(回想一下,System.Drawing只是GDI +的包装器)。此功能的文档不是很好:
不是很有用。但是,重点在于-询问图像文件以确保可以安全地加载。这可能会导致整个图像被加载到内存中。
如果您接受用户的输入,我肯定会将此标志设置为true-您永远不知道用户将上传哪种文件(格式错误或其他格式)。安全胜过遗憾。这就是为什么默认值为
true
的原因。另请注意,对于服务器环境,建议不要使用 GDI + 。您最好使用
System.Windows.Media.Imaging
。关于c# - validateImageData参数和Image.FromStream(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/420337/