从URL加载图像作为base64字符串

Sta*_*ack 9 c# url base64 xamarin

我正在尝试将图像作为基本64字符串加载,以便我可以在这样的html中显示它:

 <html><body><img src="data:image/jpeg;base64,/></img></body></html>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的代码是什么,但它并没有真正起作用:

   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();
        }
Run Code Online (Sandbox Code Playgroud)

我尝试使用我在别处找到的这个方法将return-String编码为base64,但是当将它放在html中时,图像只显示了典型的占位符.

    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
        return System.Convert.ToBase64String(plainTextBytes);
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

以下是html的外观: 在此输入图像描述

Jon*_*eet 20

在我看来,您需要将仅在HTML中需要的base64部分与从响应中获取数据分开.只需从URL获取数据作为二进制数据并将其转换为base64.使用HttpClient使这很简单:

public async static Task<string> GetImageAsBase64Url(string url)
{
    var credentials = new NetworkCredential(user, pw);
    using (var handler = new HttpClientHandler { Credentials = credentials })
    using (var client = new HttpClient(handler))
    {
        var bytes = await client.GetByteArrayAsync(url);
        return "image/jpeg;base64," + Convert.ToBase64String(bytes);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是假设的图像始终是JPEG.如果它有时可能是不同的内容类型,您可能希望将响应作为a获取HttpResponse并使用它来传播内容类型.

我怀疑你可能也想在这里添加缓存:)