Загрузка большого файла занимает на сервере время, используя ajax submit - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь загрузить изображение, используя 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>&nbsp;</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);

Есть идеи как сократить время загрузки?

...