回答问题:
我有大量的.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
[...]
}
stacktrace:
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]
现在,我收到的字节数组没有错误 - 字面上来自数据库的相同数据。我甚至比较了几个字节,总长度...无论如何,它是相同的来源。这不是故障所在。
I found another question有类似(但不完全相同)的问题。在那里,比特深度,像素格式,压缩和编解码器的问题。 我不确定原始图像的像素格式是什么,虽然从字节数组转换回Image后,它是Format1bppIndexed。
我几乎不知所措......目标机器上缺少编解码器的问题是什么?在将图像二进制文件上传到数据库之前,我需要做些什么吗?
答案 0 :(得分:0)
仅供参考 - 如果可能,切换到IIS7可以完全解决问题。
我仍然无法在IIS6上解决这个问题......并且花了一整个工作日来抨击它......无济于事。 我认为它是MIME类型处理的东西,IIS7中的DLL的一些补充,也许是GDI + ......我真的不知道。 但是,如果有其他人遇到这个问题 - 升级到IIS7 并为自己省去麻烦。