错误:将Base64字符串转换并保存到文件中[关闭]

问题描述 投票:0回答:5

*编辑

请原谅我,因为我可能不清楚这一点。抛出错误的代码是:

Convert.FromBase64String(base64)

是否有另一种方法将base64字符串转换为C#中的字节,而不是上面的方法?


我需要使用C#帮助进行文件转换。我正在尝试将base64字符串转换为文件并将其保存到我的桌面。要保存的文件是text,excel或pdf文件。我使用的代码是这样的:

File.WriteAllBytes(@"C:\Users\User\Desktop\{thefilename}", Convert.FromBase64String(base64));

但是,我收到一个错误:

输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符

我尝试先将base64保存到文本文件中,然后使用https://www.freeformatter.com/base64-encoder.html将其转换为检查base64是否真的格式正确。当我这样做时,它将base64转换为原始文件。

请问我怎么能解决这个错误?这个错误是由C#的限制引起的还是因为我有base64?我不认为这是后者,因为我能够将它在线转换为实际文件。除了我上面使用的方法之外,还有其他方法可以将base64转换为C#中的文件吗?

c# imap
5个回答
1
投票

如果base64字符串的长度不是4的倍数,则必须在字符串的右边填充“=”。

如果Base64字符串长度为7个字符,那么我们添加1“=”s

如果Base64字符串长度为6个字符,那么我们添加2“=”s

如果Base64字符串长度为5个字符,那么我们的字符串已经损坏了。因此,当base64字符串长度为1,5,11,16等时,不会出现这种情况。


0
投票

我怀疑你的Base64String有像data:image/pdf;base64这样的前缀。因此,您应该在转换为字节数组之前将其删除。

base64 = base64.Replace("data:image/pdf;base64,","");
File.WriteAllBytes(@"C:\Users\User\Desktop\{thefilename}", Convert.FromBase64String(base64));

0
投票

我试图将base64字符串转换为文件到jpgpdf之前。我认为它也适用于其他文件扩展。试试这个。

var imgByte = Convert.FromBase64String("base64");
var path = "..../file.jpg";

try{

     var _FStream = new FileStream(path, FileMode.Create);
     _FStream.GetAccessControl();
     _FStream.Write(imgByte, 0, imgByte.Length);
     _FStream.Close();
     _FStream.Dispose();

} catch (Exception ex){
     var errorMsg = ex.ToString();
}

0
投票

我可能找到了错误的答案。我能够通过打开我保存base64字符串的文本文件来解决错误,然后通过删除填充并再次重新添加来更新它。步骤如下:

  1. 将base64字符串保存到文本文件中
  2. 打开文本文件
  3. 删除填充
  4. 保存存档。
  5. 重新添加删除的填充
  6. 保存存档。
  7. 从两次更新的文本文件中获取base64字符串
  8. 调用方法Convert.FromBase64String(base64String);

我不确定是什么原因造成了这个问题。有谁知道为什么会这样?或者这是Windows操作系统问题,C#问题还是两者兼而有之?


0
投票

它可能是变体或过时的编码或任何数量的东西

你应该阅读Base64 Wiki

实现可能对用于表示某些位模式的字母表有一些约束。这主要涉及索引62和63的索引表中使用的最后两个字符,以及用于填充的字符(在某些协议中可能是强制的,或在其他协议中删除)

有几个实现和RFC,请注意Variants摘要表

既然你无法给我们输入,我们不知道它是什么变体

如果输入是正确的长度,那么替换变体字符可能同样容易,再一次不可能知道,因为看不到输入

string corrected = input.Replace('-', '+').Replace('_', '/');
var decodedBytes = System.Convert.FromBase64String(corrected);
© www.soinside.com 2019 - 2024. All rights reserved.