文件上传+重定向Laravel后连接超时

问题描述 投票:0回答:2

对于我使用 Laravel 制作的订单系统,用户可以上传与订单相关的文件。这些通过 ajax 调用发送并由 Laravel 控制器处理,然后重新加载页面。

现在我遇到的问题是,在某个时刻,用户在短时间内上传了一些文件并且他们想要上传另一个文件后,他们贪婪地遇到了ERR_CONNECTION_TIME_OUT。注意每次文件都会上传成功。

我检查了 Apache 和 Laravel 错误日志,没有任何相关内容。我还检查了 php.ini 上传限制和执行时间,我认为它们不会造成任何问题,因为它们分别设置为 128Mb(它们仅上传 PDF)和 30 秒。

我在这里遗漏了什么吗?

阿贾克斯:

$("#upload").on( "click", function() {
        var files = $('input[name=global_file]')[0].files;
        var fd = new FormData();
        fd.append('global_file',files[0]);
        fd.append('tm_num', {{ $order['tm_num'] }});

        $.ajax({
            type: "POST",
            url: '/admin/order/upload',
            data: fd,
            processData: false,
            contentType: false,
            success: function () {
                window.location.reload();
            }
        });
    });

控制器.php:

public function UploadOrderFile(Request $request)
    {
        $data = $request->all();
        $file = $request->file('global_file');

        $basepath = base_path();
        $destinationPath = $basepath.'/orders/'.$data['tm_num'];
        $fileName = $file->getClientOriginalName(); 

        $file->move($destinationPath,$fileName);
        
        return;
    }
javascript php ajax laravel
2个回答
2
投票

在ajax headers上,需要设置csrf token来访问请求。

$("#upload").on( "click", function() {
        var files = $('input[name=global_file]')[0].files;
        var fd = new FormData();
        fd.append('global_file',files[0]);
        fd.append('tm_num', {{ $order['tm_num'] }});

        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            type: "POST",
            url: '/admin/order/upload',
            data: fd,
            processData: false,
            contentType: false,
            success: function () {
                window.location.reload();
            }
        });
    });

0
投票
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

public function UploadOrderFile(Request $request)
    {
        $data = $request->all();
  if(!$request->hasFile('global_file')) return false;

        $file = $request->file('global_file');

        $basepath = base_path();
        $destinationPath = $basepath.'/orders/'.$data['tm_num'];
        $fileName = $file->getClientOriginalName(); 

        $request->store($destinationPath."/".$fileName);
        
        return true;
    }
© www.soinside.com 2019 - 2024. All rights reserved.