改写这个问题:
我有大量的.tif文件,其中大多数(如果不是全部)具有以下定义:
有些是多页的,有些则不是。
我使用以下命令加载了它们:
private byte[] LoadArchivedFile()
{
FileStream file = File.Open(fileAddress, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] fileByteArray = ReadFully(file, 0);
return fileByteArray;
}
然后,我将这些字节数组保存在SQL Server 12 DB的varbinary列中。
现在,我正在制作一个MVC2网页来查看这些.tif文件。然后,该过程应为:
Image
在开发环境中,一切都可以完美运行。将项目安装到目标IIS(当前为6,我已打开7.5的请求)后,该过程在以下行中失败:
[... load byte array from DB]
byte[] imageBinary = (byte[])results.fileBinary;
using(MemoryStream ms = new MemoryStream(imageBinary))
{
Image image = Image.FromStream(ms); <---- FAILS HERE
[...]
}
堆栈跟踪:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
at System.Drawing.Image.FromStream(Stream stream)
at [MyCode]
现在,我收到的字节数组没有问题-从字面上看,它是来自数据库的相同数据。我什至比较了几个字节,总长度...无论如何,这是相同的来源。这不是问题所在。
我发现了另一个类似(尽管不完全相同)问题的问题。在那里,有关位深,像素格式,压缩和编解码器的问题。我现在不确定原始图像的像素格式是什么,尽管从字节数组转换回Image后它是Format1bppIndexed。
我很茫然……目标机器上缺少编解码器是否出了问题?在将图像二进制文件上传到数据库之前,我需要做些什么吗?
仅供参考-如果可能,切换到IIS7可以完全解决该问题。
我仍然没有在IIS6上弄清楚这个问题,并花了另一个完整的工作日对其进行研究……无济于事。我相信这与MIME类型处理有关,是IIS7中DLL的一些附加功能,也许是GDI + ...我真的不知道。但是,如果还有其他人遇到此问题-升级到IIS7并省去麻烦。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句