Я пытаюсь загрузить изображение, используя ajax форму отправки. но загрузка файла занимает много времени, если размер файла превышает 4 МБ. На самом деле мне нужно отправить изображение во вложении электронной почты, поэтому я пытаюсь сначала загрузить изображение на сервер, а затем прикрепить это изображение во вложении электронной почты.
Вот мой java код сценария.
var file_data = $('.file-upload-input').prop('files')[0];
var form = document.getElementById("booking_form");
var data = new FormData(form);
data.append('type', type);
data.append('file', file_data);
//formdata += '&type='+type;
//formdata += '&attchment='+blob;
$.ajax({
url: 'send_email.php',
type: 'POST',
data: data,
cache: false,
contentType: false,
processData: false,
dataType:"json",
success: function(result) {
if(result.status == true) {
$('#booking_form #fname').val('');
$('#booking_form #lname').val('');
$('#booking_form #phone').val('');
$('#booking_form #email').val('');
$('#booking_form #message').val('');
$('.image-upload-wrap').show();
$('.file-upload-content').hide();
$('#error_message').hide();
$('#success_message').show();
} else {
$('#success_message').hide();
$('#error_message').show();
}
$('#send-message').prop('disabled', false);
$('.loading_indicator').remove();
}
});
Вот мой php код
<?php
define('UPLOAD_DIR', 'image_dir/');
$files = glob(UPLOAD_DIR.'/*');
foreach($files as $file) {
if(is_file($file))
// Delete the given file
unlink($file);
}
$to = 'example@example.com';
$sendTo = isset($_POST['email']) ? $_POST['email'] : "";
$subject = 'Form Submission';
$message = '<p>Hello,</p>';
$message .= '<p>Name: '.$_POST['fname'].' '.$_POST['lname'].'</p>';
$message .= '<p>Phone: '.$_POST['phone'].'</p>';
$message .= '<p>Email: '.$_POST['email'].'</p>';
$message .= '<p>Message: '.$_POST['message'].'</p>';
$message .= '<p> </p>';
$message .= '<p>Thanks,</p>';
$from = 'example@example.com';
$type = $_POST['type'];
if(!empty($type)) {
if($type == 'jpg') {
$filename = uniqid() . '.jpg';
} else if($type == 'gif') {
$filename = uniqid() . '.gif';
} else {
$filename = uniqid() . '.png';
}
if(isset($_FILES['file']) and !$_FILES['file']['error']){
move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_DIR. $_FILES['file']['name']);
$file = UPLOAD_DIR. $_FILES['file']['name'];
}
}
//boundary
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers = 'From: '.$from."\r\n".
'Reply-To: '.$from."\r\n" .
'X-Mailer: PHP/' . phpversion();
//headers for attachment
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
// Create email headers
//multipart boundary
$messageBody = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
//preparing attachment
if(!empty($file) > 0){
if(is_file($file)){
$messageBody .= "--{$mime_boundary}\n";
$fp = @fopen($file,"rb");
$data = @fread($fp,filesize($file));
@fclose($fp);
$data = chunk_split(base64_encode($data));
$messageBody .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" .
"Content-Description: ".basename($file)."\n" .
"Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
}
}
$messageBody .= "--{$mime_boundary}--";
// Sending email
if(mail($to, $subject, $messageBody, $headers)){
echo json_encode(array('status' => true));
} else{
echo json_encode(array('status' => false));
}
exit(0);
Есть идеи как сократить время загрузки?