[c#] La entrada no es una cadena Base-64 válida ya que contiene un carácter no base 64


2 Answers

Comprueba si tus datos de imagen contienen alguna información de encabezado al principio:

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

Esto causará el error anterior.

Simplemente elimine todo lo que está delante e incluya la primera coma, y ​​listo.

imageCode = "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
Question

Tengo un servicio REST que lee un archivo y lo envía a otra aplicación de consola luego de convertirlo a una matriz de bytes y luego a una cadena de Base64. Esta parte es correcta, pero cuando se recibe el mismo flujo en la aplicación, se manipula y ya no es una cadena Base64 válida. Algunos caracteres basura se están introduciendo en la transmisión.

La excepción que recibo al convertir la transmisión de nuevo a Byte es "La entrada no es una cadena válida Base-64, ya que contiene un carácter no base de 64, más de dos caracteres de relleno o un carácter de espacio no blanco entre el relleno personajes " .

En el servicio:

[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;
  }

En la aplicación:

       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); 



En caso de que no sepas el tipo de imagen cargada, solo debes quitar su encabezado 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]);



Arreglé un contexto similar al que describiste y me enfrenté al mismo error. Logré ponerlo en funcionamiento eliminando " desde el principio hasta el final del contenido y reemplazando \/ con / .

Aquí está el fragmento de código:

var result = client.Execute(request);
var response = result.Content
    .Substring(1, result.Content.Length - 2)
    .Replace(@"\/","/");
byte[] d = Convert.FromBase64String(response);

Como alternativa, puede considerar usar XML para el formato de respuesta:

[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Xml)]  
public string ExportToExcel() { //... }

En el lado del cliente:

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);





Related