Как отправить большой размер файла, т. Е. Более 1 МБ через AJAX POST-запрос? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь реализовать загрузку файла через PHP и jquery ajax. Я могу сделать это для небольших файлов, однако, когда я пытаюсь загрузить большие файлы, отображается «Неизвестная ошибка». Мой код JQuery:

var data = {
    data: self.parent().prev().find('img').attr('image_data'),
};
$.ajax({
            url: 'banner_data/upload_remove_files',
            type: 'POST',
            data: data,
            dataType: "json",
            success: function(data) {
                if (data.msg != 'error' && self.hasClass('remove_class')) {
                    alert('File Uploaded');
                },
                error: function() {
                    alert('Unknown error occurred');
                }
            });

Мой код PHP:

if (!empty($_POST['data'])) {
    $file_location = $_SERVER['SERVER_NAME'].
    '/pathname';
    $file_name = !empty($_POST['name']) ? $_POST['name'] : '';
    list($type, $raw_data) = explode(';', $_POST['data']);
    list(, $raw_data) = explode(',', $raw_data);
    $raw_data = base64_decode($raw_data);
    if (file_put_contents($file_location.$file_name, $raw_data) === FALSE) {
        $msg = 'error';
    }
}
print json_encode(array(
    'msg' => $msg,
    'file_name' => $file_name
));

Значение переменной post_max_size равно 100 МБ. Так что это не проблема. Если проблема в превышении лимита полезной нагрузки для POST-запроса, то как ее решить?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Добавить mimeType для работы с отправкой файлов с использованием ajax

$.ajax({
    url: 'banner_data/upload_remove_files',
    type: 'POST',
    data: data,
    mimeType: "multipart/form-data",
    contentType: false,
    cache: false,
    processData: false,
    dataType: "json",
    success: function(data) {
        if (data.msg != 'error' && self.hasClass('remove_class')) {
            alert('File Uploaded');
        }
    },
    error: function() {
        alert('Unknown error occurred');
    }
});
0 голосов
/ 10 января 2019

Попробуйте с этим кодом, пожалуйста:

$(document).ready(function(){

 $('#your_form').on('submit', function(event){
  event.preventDefault();
  $.ajax({
   url:"banner_data/upload_remove_files",
   method:"POST",
   data: new FormData(this),
   dataType:'JSON',
   contentType: false,
   cache: false,
   processData: false,
   success:function(data)
   {
    if(data.msg != 'error' && self.hasClass('remove_class')) {
      alert('File Uploaded');
    }
    },
   error:function(data){
    console.log(data);
    }
  })
 });

});

И используйте такую ​​форму:

 <form id="your_form" method="POST" enctype="multipart/form-data">
    <input type="file" name="image">
    <input type="submit" name="submit" value="Upload">
 </form>

А о вашем коде PHP :

// SET A DEFAULT VALUES
$msg = 'error';
$result = '';

if (isset($_POST['submit'])) {
        $file = $_FILES['file'];
        $fileName = $file['name'];
        $fileTmpName = $file['tmp_name'];
        $fileSize = $file['size'];
        $fileError = $file['error'];
        $fileType = $file['type'];
        $fileExt = explode('.', $fileName);
        $fileActualExt = strtolower(end($fileExt));

        # VERIFY YOUR FILE HERE

        if ($fileError != 0) {
            $msg = "error";
        }

        # UPLOAD ...
        clearstatcache();
        $fileNewName = uniqid(true).".".$fileActualExt; // GENERATE NAME FOR THIS FILE
        $fileDestination = 'your_path/'.$fileNewName;


        if (move_uploaded_file($fileTmpName, $fileDestination)) {
            $msg = "Good ...";
            $result = "File Path : ".$fileDestination;
        }
}

echo '['.json_encode(['msg' => $msg, 'file_name' => $result]).']';

И если вы не можете отправить большой размер файла т.е. более 1 МБ ... Просто измените php.ini:

post_max_size = 256M
upload_max_filesize = 1000M
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...