我可以下载吗?一个数据uri,而不需要我自己做

本文关键字:uri 数据 不需要 自己做 我自己 一个 下载 我可以 | 更新日期: 2023-09-27 18:17:09

也许它不是一个名为WebClient类的责任,把一个数据uri变成一个字节[],但我尝试了

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

给出一个类似于

的uri

数据:图像/gif; base64, R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

并得到一个webeexception说

无法识别URI前缀。

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

解码这样一个uri的问题

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

R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

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

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

如果我不想要额外的分配,我需要自己做整个base64解码吗?

我可以下载吗?一个数据uri,而不需要我自己做

很抱歉,您只能通过使用特定的Encoding基类来转换字符串的一部分。(而不是一次转换整个内容)

如果你处理的是web的东西,我猜你想要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编码的字符串,从而避免一次完全分配它。