在IIS6上将字节数组映射到Image

时间:2014-06-15 10:25:32

标签: c# asp.net-mvc-2 iis-6 tiff image-conversion

回答问题:

我有大量的.tif文件,其中大部分(如果不是全部)都有以下定义:

  • 比特深度:1
  • 压缩:CCITT T.6(第4组)

有些是多重的,有些不是。

我使用以下方法加载它们:

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
  • 在.tif
  • 中选择一个页面
  • 将该页面转换为Jpeg
  • 将页面发送到浏览器

在开发环境中,一切都很完美。在目标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。

我几乎不知所措......目标机器上缺少编解码器的问题是什么?在将图像二进制文件上传到数据库之前,我需要做些什么吗?

1 个答案:

答案 0 :(得分:0)

仅供参考 - 如果可能,切换到IIS7可以完全解决问题。

我仍然无法在IIS6上解决这个问题......并且花了一整个工作日来抨击它......无济于事。 我认为它是MIME类型处理的东西,IIS7中的DLL的一些补充,也许是GDI + ......我真的不知道。 但是,如果有其他人遇到这个问题 - 升级到IIS7 并为自己省去麻烦。