使用ajax(json)上传图片

时间:2015-05-11 09:19:58

标签: php ajax image upload

我需要使用ajax上传图片。阐述我的观点: 我需要将我的图像数据传递给PHP页面并检查文件的类型,大小,名称和所有其他属性。如果所有属性都匹配,那么我只需要传输文件。这里的问题是数据的传递应该只以JSON(AJAX)格式完成。更重要的是,我不必将其转换为base64。

如果你能帮助我,欢迎你。

提前致谢。

1 个答案:

答案 0 :(得分:1)

SO中的想法是处理OP当前代码。我的意思是,我们不是要完成所有的工作,因为它应该有代价。无论如何,这是您的问题的解决方法:

使用javascript将图片转换为base64。这个有用的方法就像一个魅力:

// Code taken from MatthewCrumley (http://stackoverflow.com/a/934925/298479)
function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to guess the
    // original format, but be aware the using "image/jpg" will re-encode the image.
    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

然后只需将返回的字符串作为base64传递给ajax:

$.ajax({
    url: 'path/to/your/script.php',
    type: 'post',
    data: { paramName: imagedata } // the returned data from above js method,
    /*...*/
});

而且,在PHP方面,只需将字符串返回到图像文件:

// Code taken from Austin Brunkhorst (http://stackoverflow.com/a/15153931/3648578)
function base64_to_jpeg($base64_string, $output_file) {
    $ifp = fopen($output_file, "wb"); 

    $data = explode(',', $base64_string);

    fwrite($ifp, base64_decode($data[1])); 
    fclose($ifp); 

    return $output_file; 
}