尝试使用C#将B64字符串转换为图像时,图像已损坏

本文关键字:图像 转换 已损坏 字符串 B64 | 更新日期: 2023-09-27 18:25:43

我正试图使用C#将流转换为图像,但图像似乎已损坏。

以下是我如何获得BaseString表示

byte[] imageArray = System.IO.File.ReadAllBytes(@"C:'Users'jay.raj'Desktop'images'images'tiger.jpg");
string base64ImageRepresentation = Convert.ToBase64String(imageArray);

现在我将它传递给一个函数,该函数将它转换为Stream,并尝试将它转换成图像文件。

 byte[] byteArray = Encoding.ASCII.GetBytes(mySettingInfo.FileToUpload);
 MemoryStream stream = new MemoryStream(byteArray);
 UtilityHelper.UploadImageFormDevice(stream, ref ss);

这里是UploadImageFormDevice函数:

public static ResponseBase UploadImageFormDevice(Stream image, ref string imageName)
    {
        ResponseBase rep = new ResponseBase();
        try
        {
            string filname = imageName;
            string filePath = @"C:'Users'jay.raj'Desktop'Upload'";
            if (filname == string.Empty)
                filname = Guid.NewGuid().ToString() + ".jpg";
            filePath = filePath + "''" + filname;
            FileStream fileStream = null;
            using (fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                const int bufferLen = 1024;
                byte[] buffer = new byte[bufferLen];
                int count = 0;
                while ((count = image.Read(buffer, 0, bufferLen)) > 0)
                {
                    fileStream.Write(buffer, 0, count);
                }
                fileStream.Close();
                image.Close();
            }
            imageName = filname;
        }
        catch (Exception ex)
        {
            rep.Code = 1000;
            rep.Message = "Server Error";
        }
        return rep;
    }

尝试使用C#将B64字符串转换为图像时,图像已损坏

正如@naivists所写,尝试替换此行:

byte[] byteArray = Encoding.ASCII.GetBytes(mySettingInfo.FileToUpload);

到此行:

byte[] byteArray = Convert.FromBase64String(mySettingInfo.FileToUpload);

看起来您想要将文件从@"C:'Users'jay.raj'Desktop'images'images'tiger.jpg"传输到@"C:'Users'jay.raj'Desktop'Upload'" + "''" + Guid.NewGuid().ToString() + ".jpg"

在您的情况下,将文件读取为字节数组,将其转换为以64为基的编码字符串,然后再次转换为字节数组。这是不必要的,而且容易出错。在你的情况下,你错过了解码。

如果你暂时忽略它是一个图像,并将其视为一堆字节,事情可能会变得更容易。

string srcPath = @"C:'Users'jay.raj'Desktop'images'images'tiger.jpg";
string dstPath = @"C:'Users'jay.raj'Desktop'Upload'" + "''" + Guid.NewGuid().ToString() + ".jpg";
byte[] imageArray = System.IO.File.ReadAllBytes(srcPath);
System.IO.File.WriteAllBytes(dstPath, imageArray);