0

因此,我使用 jquery/javascript 将 base64 图像文本发送到 php 文件,如下所示:

//Upload picture
$('#uploadPictureBtnHtml').click(function(){
    OpenLoader();
   var baseEncPicData = $('#chosenPictureData').val();
    $.ajax({
        type:'POST', url:'upload_picture.php',  dataType:"json",  data:{ PicFile: baseEncPicData },
        success:function (upload_pic_data) {
            if (upload_pic_data[0] == 'true') {
                    alert("it worked!");
                    CloseLoader();
            }
            else{
                    //upload_pic_data[1] will return PHP errors
                    alert("Why it didnt work: "+upload_pic_data[1]+" ");
                    CloseLoader();
            }
        }
        });
});

我知道这很好用,因为如果我获取baseEncPicData变量并像这样输出它:

$('#some_div').html('<img src="data:image/jpeg;base64,'+baseEncPicData+'" />');

它工作得很好,图像显示没有问题。

当我将它发送到 PHP 文件时,我像这样解码并“重新组装”它:

$dataUno = htmlspecialchars(trim(urldecode($_POST['PicFile'])));
$dataDos = base64_decode($dataUno);
$data = imagecreatefromstring($dataDos);
$the_new_png = imagepng($data, $the_directory);

我收到的错误仅在 PHP 中,即:

 imagecreatefromstring() [function.imagecreatefromstring]: Empty string or invalid image
 imagepng() expects parameter 1 to be resource

这让我相信它没有正确解码 JSON,因为有一些字符被剥离,这些字符是 base64 图像的一部分。这只是一个假设。不完全确定我做错了什么。任何帮助都是极好的。感谢您花时间阅读本文。

4

1 回答 1

2

删除此字符串:

htmlspecialchars(trim(urldecode($_POST['PicFile'])));

...并只是处理$_POST['PicFile']。通过该预处理,您可以将所有+字符(在 Base64 中允许)转换为空格 ( ),从而有效地破坏二进制文件。

于 2012-10-01T10:55:36.440 回答