将Blob字符串转换为JPG文件

3

在我的方法中,我会得到一个代表二进制大对象文件的字符串参数。这个字符串非常庞大,以下是它的开头:

"iVBORw0KGgoAAAANSUhEUgAAAHgAAAA3CAMAAADwtH5ZAAADAFBMVEX//////P///v/+///3/f3//f+zoJL3///15/SKWy
fZ3NPw///w/v78+/n++vH79vP9/f35/fz1+/n0+/T/+vj/+v3p7Ne6MgK8UgDKYBTTSxfXTTC+dWaHMBT///v4///49vf9
//7+/v77///8////9/zo2L+zTAHEZgazSQ/MgAjIqEWqUB7KdhbboELEdDm/dBfNbTG+moS5Sh/n9fbu+vD/8vH9/Pfx///
+9fr4//3//Pv4+fSSTxvGgAbOlV6bSwDKoW2wdlC6bRPLo3DElEqyPwjbcwDOpCuzNwDWgUDpdD7Un22yeln7/+71//368"

如何将其转换为 .jpg 文件?

该字符串为base64编码。


你对这个字符串了解多少?Base-64编码的吗?里面有什么? - H H
@HenkHolterman 是的,它是base64。 - petko_stankoski
3个回答

8
string base64string = "iVBORw0KGgoAAAANSUhEUgAAAHgAAAA3CAMAAADwtH5ZAAADAFBMVEX//////P///v/+///3/f3//f+zoJL3///15/SK";  // Put the full string here
byte[] blob = Convert.FromBase64String(base64string);
File.WriteAllBytes(@"C:\Users\user\Desktop\fic.jpg", blob);

2

这是我在Web API中保存图像的方法。

您可以基于Base64内容获取文件扩展名,并将其与filePath组合为:

[HttpPost]
[Route("api/dashboard/saveThumbnail")]
public HttpResponseMessage SaveThumbnail()
{
    //string base64string = "iVBORw0KGgoAAAANSUhEUgAAAHgAAAA3CAMAAADwtH5ZAAADAFBMVEX//////P///v/+///3/f3//f+zoJL3///15/SK";
    var httpRequest = HttpContext.Current.Request;
    string base64string =  httpRequest["Thumbnail"]; // get from request
    byte[] blob = Convert.FromBase64String(base64string);
    var fileExt= GetFileExtension(base64string );
    var filePath = string.Format("{0}\{1}.{2}", @"C:\Picture", "mypicture", fileExt);
    File.WriteAllBytes(filePath, blob);
}

基于base64字符串获取文件类型的方法

public string GetFileExtension(string base64String)
        {
            var data = base64String.Substring(0, 5);

            switch (data.ToUpper())
            {
                case "IVBOR":
                    return "png";
                case "/9J/4":
                    return "jpg";
                case "AAAAF":
                    return "mp4";
                case "JVBER":
                    return "pdf";
                case "AAABA":
                    return "ico";
                case "UMFYI":
                    return "rar";
                case "E1XYD":
                    return "rtf";
                case "U1PKC":
                    return "txt";
                case "MQOWM":
                case "77U/M":
                    return "srt";
                default:
                    return string.Empty;
            }
        }

  1. 即使这个“可行”,我也不会在base64字符串上使用ToUpper。它们编码字节。base64字符串“SGllbg==”和“SGLLBG ==”表示非常不同的字节,它们没有关联。为什么不只是使用“iVBOR”,而不对数据使用ToUpper。当然,您还需要混合大小写的字符串来处理其他类型。
  2. Substring(0, 5)也似乎很奇怪,与base64编码不符。
- AndrewR

1

首先获取字节:

byte[] data = Convert.FromBase64String(theString);

当它是一个文件图像时,只需将其写入:

File.WriteAllBytes("test.jpg", data);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接