input不是有效的Base-64string,因为它包含非基本的64个字符
我有一个REST服务读取一个文件并将其转换为Byte数组,然后将其转换为Base64string后,将其发送到另一个控制台应用程序。 这部分正确的发生,但是当在应用程序接收到相同的stream时,它被操纵,不再是一个有效的Base64string。 一些垃圾字符正在被引入到stream中。
我将stream转换回字节时得到的exception是“input不是有效的Base-64string,因为它包含非基本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); 
	
 很可能它被转换成一个修改过的Base64,其中+和/字符被更改为-和_ 。 见http://en.wikipedia.org/wiki/Base64#Implementations_and_history 
如果是这样的话,你需要把它改回来:
 string converted = base64String.Replace('-', '+'); converted = converted.Replace('_', '/'); 
检查您的图像数据是否包含一些标题信息:
 imageCode = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC... 
这将导致上述错误。
只要删除包括第一个逗号前面的所有内容,你就可以走了。
 imageCode = "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC... 
我们可以删除前面的不必要的stringinput。
 string convert = hdnImage.Replace("data:image/png;base64,", String.Empty); byte[] image64 = Convert.FromBase64String(convert); 
 我按照你的描述安排了一个类似的背景,我面临着同样的错误。 我设法通过删除"从内容的开始和结束,并通过\/ /取代\/ / 。 
这里是代码片段:
 var result = client.Execute(request); var response = result.Content .Substring(1, result.Content.Length - 2) .Replace(@"\/","/"); byte[] d = Convert.FromBase64String(response); 
作为替代,您可以考虑使用XML作为响应格式:
 [WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Xml)] public string ExportToExcel() { //... } 
在客户端:
 request.AddHeader("Accept", "application/xml"); request.AddHeader("Content-Type", "application/xml"); request.OnBeforeDeserialization = resp => { resp.ContentType = "application/xml"; }; var result = client.Execute(request); var doc = new System.Xml.XmlDocument(); doc.LoadXml(result.Content); var xml = doc.InnerText; byte[] d = Convert.FromBase64String(xml); 
由于您将string作为JSON返回,因此该string将在原始响应中包含开始和结束引号。 所以你的回应可能应该是这样的:
 "abc123XYZ==" 
或任何…你可以尝试确认这与提琴手。
 我的猜测是result.Content是原始string,包括引号。 如果是这种情况,那么result.Content将需要反序列化,然后才能使用它。 
  以防万一你不知道上传的图像的types,你只需要删除它的base64头: 
  var imageParts = model.ImageAsString.Split(',').ToList<string>(); //Exclude the header from base64 by taking second element in List. byte[] Image = Convert.FromBase64String(imageParts[1]);