我试图加载一个图像作为一个base 64字符串,这样我就可以显示在一个html像这样:
<html><body><img src="data:image/jpeg;base64,/></img></body></html>
下面是我的代码,但它并不真正工作:
public async static Task<string> getImage(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Accept = "data:image/jpg;charset=base64";
request.Credentials = new NetworkCredential(user, pw);
using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
我试着用这个方法把return-String编码为base64,但是当把它放在html中时,图像只显示典型的占位符。
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
编辑:
下面是HTML的外观:
4条答案
按热度按时间fwzugrvs1#
在我看来,您需要将base64部分(仅在HTML中需要)与从响应中获取数据分开,只需从URL中获取二进制数据并将其转换为base64,使用
HttpClient
可以简化此操作:这假设图像总是 * 将 * 是JPEG。如果它有时可能是不同的内容类型,您可能希望以
HttpResponse
的形式获取响应并使用它来传播内容类型。我猜你可能也想在这里添加缓存:)
i7uq4tfw2#
ukqbszuj3#
此解决方案适用于.NET Core 3.1
如果你在前端有JS,请使用以下代码:
bogh5gae4#
你必须首先从磁盘中获取镜像,然后将其转换为byte[],然后再转换为base64。