我正在使用以下代码将图像保存到表格中:
if (FileUploadControl.PostedFile.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
{
byte[] imagedata = MSImage.ConvertToByte(FileUploadControl);
if (imagedata != null)
{
string param = "@Image";
SqlParameter sp = spc.Add(new SqlParameter(param, SqlDbType.VarBinary, -1));
sp.Value = imagedata;
sql += ", " + Q.C(Database.MSImage) + "=" + param + ", " + Q.C(Database.MSImageType) + "=N'" + FileUploadControl.PostedFile.ContentType + "'";
}
}
尝试使用以下代码将其加载到background-image
样式中:
string imagedata = MSImage.ConvertToImage((byte[])ms[Database.MSImage]);
if (imagedata != null && ms[Database.MSImageType] != DBNull.Value && ((string)ms[Database.MSImageType]).StartsWith("image/", StringComparison.OrdinalIgnoreCase))
{
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
}
问题是它不会加载图像,当我尝试检查元素时,它会被卡住,因为转换后的byte
数组返回了一个很长的string
(总结为大约650k字符)。
这是我的MSImage
课程:
public class MSImage
{
public static byte[] ConvertToByte(FileUpload hpf)
{
try
{
if (hpf.HasFile)
{
Stream fs = hpf.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
return bytes;
}
}
catch { }
return null;
}
public static string ConvertToImage(byte[] imagedata)
{
try
{
if (imagedata != null && imagedata.Length > 0)
return Convert.ToBase64String(imagedata);
}
catch { }
return null;
}
}
我是以错误的方式保存图像还是导致问题的加载?
我刚刚发现这段代码就是问题:
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
我尝试使用div
runat="server"
并使用div.Style["background-image"]
,但我如何才能使用InnerHtml
?
答案 0 :(得分:1)
我使用以下代码转换我的图片,也许你发现了差异......
static string Image2Base64(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imageBytes = ms.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
static Bitmap Base642Image(string base64image)
{
try
{
byte[] imageBytes = Convert.FromBase64String(base64image);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Bitmap image = (Bitmap)Image.FromStream(ms, true);
return image;
}
catch { return null; }
}
我希望这可以帮助你...
答案 1 :(得分:0)
我刚刚找到了解决方案(虽然这是一个愚蠢的解决方案):
这行代码导致了问题:
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
我改变了它的结尾:
";base64, " + imagedata + ")\"></div>";
要:
";base64," + imagedata + ")\"></div>";
";base64,"
到imagedata
之间的空格导致了它,因为InnerHtml
没有用%20
替换空格字符。