首页 > 解决方案 > 当我使用 AJAX jQuery 向 Laravel 5 控制器提交较大的文件时,它得到空数据

问题描述

当我尝试使用 jQuery ajax 请求将图像文件上传到 Laravel 控制器时,控制器中的输出为空。但是当我上传一个小文件时,它可以访问但不能访问较大的文件。(我使用的是 laravel 5.7 版。*)

注意:我已经更新了我的 php.ini 文件的文件上传限制和上传限制为 50M。即使它给出了同样的问题。

我已经更新了我的 php.ini 文件的文件上传限制和上传限制为 50M。即使它给出了同样的问题。

$.ajax({
    method: "POST",
    url: 'photo-upload',
    data: formData, // I had appended all the data to this FormData();
    success: function(result){
           swal("Success","Uploaded Successfully","success");
    },
    cache: false,
    contentType: false,
    processData: false
});

// 内部控制器

$photo = Input::file('photo'); // It's giving empty result with larger file

标签: jqueryajaxlaravellaravel-5

解决方案


试试这个:

$.ajax({
     url: "photo-upload",
     method:"POST",
     data: new FormData(this),
     // IF YOU WANT TO USE PROGRESS
     xhr: function() {
          var myXhr = $.ajaxSettings.xhr();
          if(myXhr.upload){
              // FUNCTIONS 
              myXhr.upload.addEventListener('progress', progress, false);
              myXhr.addEventListener("load", complete, false);
              myXhr.addEventListener("error", error, false);
              myXhr.addEventListener("abort", abort, false);
          }
          return myXhr;
      },
     dataType:'JSON',
     contentType: false,
     cache: false,
     processData: false,
     // IF SUCCESS
     success:function(data)
     {
        console.log(data);
     }
  });

2 - 在您的控制器中:

protected function upload(Request $request) {
    // UPLOAD YOUR FILE HERE & INSERT DATA TO DATABASE
    $path = Storage::putFile('files', $request->file('photo')); // UPLOAD AND GET PATH

    // RETURN JSON DATA
    return response()->json([
           'file' => $path
    ]);
}

如果您想在上传过程中使用进度或任何消息,这将有所帮助:

function progress(event){
  var percent = (event.loaded / event.total) * 100;
  var num = Math.round(percent);
  // SET THIS TO ANY DIV WITH JQUERY
}

function completeHandlerHome(event){
  // IF UPLOAD COMPLETED
}

function errorHandlerHome(event){
  // IF IS ERROR
}

function abortHandlerHome(event){
  // IF IS ABORTED
}

对我有用:)


推荐阅读