尝试使用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;
}
正如@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);