当前位置: 首页 > 知识库问答 >
问题:

输入不是有效的Base-64字符串,因为它包含非base 64字符

唐彬炳
2023-03-14

我有一个REST服务,它读取一个文件,并在将其转换为字节数组后将其发送到另一个控制台应用程序,然后将其转换为Base64字符串。这部分有效,但是当应用程序接收到相同的流时,它会被操纵,不再是有效的Base64字符串。一些垃圾字符被引入到流中。

将流转换回Byte时收到的异常为

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

服务时:

[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Json)]  
public string ExportToExcel()
  {
      string filetoexport = "D:\\SomeFile.xls";
      byte[] data = File.ReadAllBytes(filetoexport);
      var s = Convert.ToBase64String(data);
      return s;
  }

在申请时:

       var client = new RestClient("http://localhost:56877/User/");
       var request = new RestRequest("ReadFile/Convert", RestSharp.Method.GET);
       request.AddHeader("Accept", "application/Json");
       request.AddHeader("Content-Type", "application/Json");
       request.OnBeforeDeserialization = resp => {resp.ContentType =    "application/Json";};
       var result = client.Execute(request);
       byte[] d = Convert.FromBase64String(result.Content); 

共有3个答案

经俊茂
2023-03-14

我们可以删除值前面不必要的字符串输入。

string convert = hdnImage.Replace("data:image/png;base64,", String.Empty);

byte[] image64 = Convert.FromBase64String(convert);
严宇
2023-03-14

它很可能被转换为修改后的 Base64,其中 和 / 字符更改为 - _。见 http://en.wikipedia.org/wiki/Base64#Implementations_and_history

如果是这样,你需要把它改回来:

string converted = base64String.Replace('-', '+');
converted = converted.Replace('_', '/');
史涵育
2023-03-14

检查图片数据开头是否包含一些标题信息:

imageCode = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...

这将导致上述错误。

只要去掉前面的所有内容,包括第一个逗号,你就可以走了。

imageCode = "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
 类似资料:
  • 在使用Cordova Plugin FileReader转换pdf文件并将其发送到.Net服务器后,服务器在将base64字符串转换为字节数组时抛出错误“输入不是有效的Base-64字符串,因为它包含非base64字符、两个以上的填充字符或填充字符中的非法字符。”。 Java脚本代码: C#代码: Base64字符串开头: data:application/pdf;base64,JVBERi0xL

  • 当我们调用时,它会抛出一个异常,说明。我能做什么?

  • *最后这是我在Intellij Idea控制台中的完整输出: 如果我错过了什么话请告诉我。非常感谢你的大力帮助。

  • 我有一个带有CosmosDB输出绑定的http触发器和一个最简单的函数,如下所示。 当我执行时,我得到一个错误 异常绑定参数'Request estOutput'。System.Private.CoreLib:输入不是有效的Base-64字符串,因为它包含一个非base 64字符、两个以上的填充字符或填充字符中的非法字符 我正在使用azure函数的V2。 我已经观察到删除输出绑定是有效的。所以看起

  • 我能够通过使用下面这个问题的注释提供的代码来解决这个问题。所有其他帖子都是有效的! 我使用的有用的东西来自第一个评论。虽然提供的所有示例代码似乎也是有效的!

  • 问题内容: 我需要一个可以告诉我字符串是否包含非字母数字字符的方法。 例如,如果字符串为“ abcdef?” 或“abcdefà”,该方法必须返回true。 问题答案: 使用Apache Commons Lang: 另一种方法是遍历String的字符并检查: 您还剩下一个问题:示例字符串“abcdefà”是字母数字,因为是字母。但我认为您希望将其视为非字母数字,对吗? 因此,您可能想使用正则表达式