xhr envía cadena base64 y decodifícala en el server a un file

Estoy tratando de enviar un img codificado en base64 al server, el javascript se ve como

var xhr=new XMLHttpRequest() var reader=new FileReader() reader.onloadend=function(e){ xhr.onload=function(e){ alert(xhr.responseText) } xhr.open("POST","upload.php"); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); //xhr.setRequestHeader("X-File-Name", file.name); //xhr.setRequestHeader("X-File-Type",file.type) xhr.send(e.target.result) } reader.readAsDataURL(file) },false) 

En php, se ve así:

 echo "some response Text"; $postdata = file_get_contents("php://input"); file_put_contents('MyFile.jpg', base64_decode($postdata)); 

Y, finalmente, el server obtiene un file exactamente tan grande como el file enviado. Sin embargo, no se puede abrir.
¿Alguien tiene algunas ideas? ¡Muchas gracias!

One Solution collect form web for “xhr envía cadena base64 y decodifícala en el server a un file”

 reader.readAsDataURL(file) 

Una URL de datos NO es lo mismo que una versión base64 del file. Obtienes basura extra en ella. Se parece a esto:

 data:[<MIME-type>][;charset=<encoding>][;base64],<data> 

Ver Wikipedia .

Intenta hacer una expresión regular simple en él:

 var data = dataURL.match(/,(.*)$/)[1]; 

O, en tu código,

 xhr.send(e.target.result.match(/,(.*)$/)[1]); 
  • (NS_ERROR_DOCUMENT_NOT_CACHED) a través del mismo código de Firefox funciona para safari
  • En XMLHttpRequest, ¿dónde está variable el indicador de error?
  • document.write () sobrescribiendo el documento?
  • Obtiene el object HTMLFormElement de Jquery submit ()
  • Amazon S3 CORS PUT falla
  • Javascript / AJAX no funciona en Opera, funciona perfectamente en FF / IE / Chrome
  • XMLHttpRequest siempre llama a "load" event listener, incluso cuando la respuesta tiene un estado de error
  • Recuperar y modificar el contenido de un XMLHttpRequest
  • XMLHttpRequest no puede cargar URL. Origen no permitido por Access-Control-Allow-Origin
  • ¿Recostackrá este código JavaScript basura como yo esperaba?
  • Detectando si el caching de un browser está lleno
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.