使用表单发送到服务器时base64图像速度慢

时间:2015-10-30 11:16:03

标签: php jquery base64 image-resizing

我正在使用ajax将base64编码的图像文件发送到服务器。因为我想限制允许的大小,我会调整图像大小,然后在发送到服务器之前附加到表单。但到目前为止,性能相当缓慢。大约10秒钟发送整个表格。

这是我从jquery到php(codeigniter)的代码。

JQuery:对文件输入的操作已更改

$('#verify_file').on('change', function(){
    attachment = null;
    if(!this.files[0].type.match('image.gif') && !this.files[0].type.match('image.jpeg') &&
        !this.files[0].type.match('image.jpg') && !this.files[0].type.match('image.png')) {
        alert('Berkas harus berupa gambar dengan ekstensi JPEG, JPG, GIF atau PNG');
        return;
    }
    var reader = new FileReader();
    reader.onload = function(e) {
        var tempImg = new Image();
        tempImg.src = e.target.result;
        tempImg.onload = function() {
            console.log(tempImg.width + ', ' + tempImg.height);
            var MAX_WIDTH = 400;
            var MAX_HEIGHT = 400; 
            var tempW = tempImg.width;
            var tempH = tempImg.height;
            if (tempW > tempH) {
                if (tempW > MAX_WIDTH) {
                    tempH *= MAX_WIDTH / tempW;
                    tempW = MAX_WIDTH;
                }
            } else {
                if (tempH > MAX_HEIGHT) {
                    tempW *= MAX_HEIGHT / tempH;
                    tempH = MAX_HEIGHT;
                }
            }
            var canvas = document.createElement("canvas");
            canvas.width = tempW;
            canvas.height = tempH;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(this, 0, 0, tempW, tempH); 
            attachment = canvas.toDataURL("image/jpeg");            
        }
    }
    reader.readAsDataURL(this.files[0]);
    this.files = [];
});

JQuery:附加到表单

var formData = new FormData($('.verify_me_form')[0]);
formData.append('data_verif', attachment);

最后:PHP存储base64编码

$data_image = $this->input->post('data_verif', '');     

list($t1, $data_image) = explode(';', $data_image);
list($t2, $data_image) = explode(',', $data_image);

$encodedData = str_replace(' ','+',$data_image);

$src = base64_decode($encodedData);
$target = $dir.'/'.$verify_file;
if (file_put_contents($target, $src) > 0) {
    $result['code'] = $this->process_verification_data($user_id, $str_num, $verify_file) ? EXIT_SUCCESS : EXIT_DATABASE;
    $result['message'] = $verify_file;          
}
echo (json_encode ( $result ));
exit;

这就是全部。但是json结果需要很长时间才能返回到ajax调用者。

任何人都知道如何解决这个问题?

0 个答案:

没有答案