xhr отправляет строку base64 и декодирует ее на сервере в файл - PullRequest
4 голосов
/ 11 сентября 2011


Я пытаюсь отправить im64 в кодировке base64 на сервер, JavaScript выглядит как

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)


В php выглядит так:

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

И, в конце концов, сервер получает файл точно размером с отправленный файл, однако его нельзя открыть
У кого-нибудь есть идеи? Большое спасибо!

1 Ответ

18 голосов
/ 11 сентября 2011
reader.readAsDataURL(file)

URL-адрес данных НЕ совпадает с версией файла base64. Вы получаете дополнительный мусор в этом. Это выглядит так:

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

См. Википедия .

Попробуйте сделать простое регулярное выражение:

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

Или, в вашем коде,

xhr.send(e.target.result.match(/,(.*)$/)[1]);
...