我可以下载"数据uri而不必自己完成所有这些操作?

时间:2016-11-08 15:08:59

标签: c# base64 webclient data-uri

也许这个名为WebClient的类没有责任将数据uri转换成byte [],但我试过

var client = new WebClient();
var result = client.DownloadData(uri);

给出一个看起来像

的uri
  

数据:图像/ GIF; BASE64,R0lGODlhAQABAIAAAAAAAP /// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

并得到一个WebException说

  

无法识别URI前缀。

如何以最简单的方式解码数据uri?

使用

解码这样的uri的问题

Convert.FromBase64String(str)是我需要提取部分

  

R0lGODlhAQABAIAAAAAAAP /// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

首先,这当然是一项微不足道的任务。

然而,当文件变大时,这将需要我分配大量内存以获得几乎相等的字符串。 Convert.FromBase64String没有偏移参数是个谜。

如果我不想要额外的分配,我是否需要自己完成整个base64解码?

1 个答案:

答案 0 :(得分:0)

afaik,您可以使用特定的Encoding基类来转换字符串的一部分。 (而不是一次性转换整个事物)

如果你正在处理网络内容,我想你想要UTF8

这些内容中的某些内容: (这个例子不是完全你想做什么)

string completeMessage = "";
int byteStepSize = 4;

for(int i=0; i < byteStepSize; i+= byteStepSize)
{
    string subStr = str.SubString(i, i+byteStepSize);
    completeMessage += encoding.UTF8.GetString(Convert.FromBase64String(subStr));
}

您可以(理论上)以这种方式通过base64编码的字符串进行流式处理,从而无需一次性完全分配它。