我正在使用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调用者。
任何人都知道如何解决这个问题?