ToBase64String()方法应该适用于所有图像类型吗?

时间:2014-03-04 14:17:36

标签: c# image asp.net-mvc-3

到目前为止,我一直在使用转换方法ToBase64String一段时间没有任何问题。我基本上采用上传的图像,将其转换为字节数组,然后使用ToBase64String()方法结合识别的内容MIME类型,将其分配给我页面上的图像标记源。这是我的方法:

    protected string RenderImage(byte[] image, string contentType)
    {
        try
        {
            if (profilePhoto != null)
            {
                byte[] byteArray = image;
                string imageBase64 = Convert.ToBase64String(byteArray);
                string imageSrc = string.Format("data:"+ contentType +";base64,{0}", imageBase64);
                return imageSrc;                    
            }
        }
        catch (Exception ex)
        {
            // Catch Exception
        }
        return null;
    }

我在MVC框架中工作,所以我在一个成功的ajax函数调用中将返回的值指定为我的图像标记的源。一段代码:

success: function (result) {
     var newImg = document.getElementById("updatedImage");
     newImg.src = result;
}

这一直运行良好,但最近我注意到image / png和image / x-png MIME类型尚未使用此方法成功呈现。我已经将这些图像的属性与那些没有问题的属性进行了比较,我找不到可以解释问题的任何重大差异。

我还注意到JPG文件并不普遍存在问题,如果我只是将png文件的直接路径指定为源文件,则文件会在图像标记中正确呈现。

我似乎有一种闯入像这样的古怪的诀窍,但希望有人能够提供一些输入,说明为什么会发生这种情况。

我认为只要字节数组的大小在合理的限制范围内,image标签就应该能够处理Convert.ToBase64String()方法提供的任何字符串。而且这些PNG文件无论如何都相对较小。尺寸约为49KB,尺寸为232 x 232.

1 个答案:

答案 0 :(得分:1)

你是如何获得图像字符串的?

这听起来像是一个GET大小限制问题,服务器会以静默方式截断响应。

要进一步排除故障...我会查看你通过ajax获得的base64字符串,然后将其与你方法中的实际图像toBase64进行比较。