为啥 laravel $request->file 返回 null?

Posted

技术标签:

【中文标题】为啥 laravel $request->file 返回 null?【英文标题】:Why does laravel $request->file return null?为什么 laravel $request->file 返回 null? 【发布时间】:2021-08-12 23:53:26 【问题描述】:

我有一个代码,我在另一个应用程序中使用它来使用运行良好的 Ajax 上传文件。 在带有 Jquery 模式对话框的新应用程序中重用此代码未按预期工作。以下是我的表格:

!! Form::open(['method' => 'POST', 'route' => ['auto-evaluation-documents.store'], 'files' => 'true', 'role' => 'form', 'id' => 'document_form']) !!
<div class="modal-content" modal-transclude="" title="New Attachment">
        <div class="form-group">
            <input class="ng-scope" type="file" name="file" id="file">
        </div>
</div>
!! Form::close() !!

下面是我的模态对话框

var dialog;

dialog = $(".modal-content").dialog(
        autoOpen: false,
        height: 400,
        width: 600,
        modal: true,
        buttons: 
            "Save": uploadFile,
            Cancel: function() 
                $('#file').val('');
                $('.c-fileupload__body').hide();
                dialog.dialog( "close" );
            
        ,
        close: function() 
            //form[ 0 ].reset();
            //allFields.removeClass( "ui-state-error" );
            $('#file').val('');
            $('.c-fileupload__body').hide();
        
    );

$("#new_attachment_button").button().on( "click", function() 
    dialog.dialog( "open" );
);

下面是上传文件功能

function uploadFile() 
    var document_form = $('#document_form');
    var options = 
        beforeSubmit: showRequest,  // pre-submit callback
        success: showResponse,  // post-submit callback
        uploadProgress: OnProgress, //upload progress callback
        data:   'document_type': 'file', 'evaluation_session_id':'2',
        url:  document_form.attr('action'),
        type:      'post',
        dataType:  'json'
    ;
    // attach handler to form's submit event
    document_form.ajaxSubmit(options);
    // return false to prevent normal browser submit and page navigation
    return false;


// pre-submit callback
function showRequest(formData, jqForm, options) 
    var file_msg = $('#file_msg');
    file_msg.empty().hide();
    var value = $('#file').fieldValue();
    if (!value[0]) 
        message = "<li>Please select a file to upload</li>";
        file_msg.append(message).show();
        return false;
     else 
        formData.push( 'name': 'file', 'value': value[0]);
        return true;
    

在 Laravel 控制器中,我这样做:

public function store(Request $request)

   
    $file = $request->file('file');
    $return['success'] = true;
    $return['file_name'] =  $file;
    return response()->json($return, 200, ['Content-Type' => 'text/html']);


但是,当我检查控制台时,$request->file('file') 得到的结果为 null

如果我执行 $request->get('file'),我会得到 C:\fakepath\banner-image.jpg

为什么即使我的表单有 enctype="multipart/form-data" $request->file('file') 也不起作用?

我在这里应用了其他解决方案,但没有成功。请帮忙

【问题讨论】:

【参考方案1】:

你应该尝试转储 $request->all();看看错误是否在前端。如果您有名为“文件”的文件,则错误在前端/Angular 中。

【讨论】:

这是 $request->all() 转储的结果,array(4) ["_token"]=&gt; string(40) "2OMJoSozppgNmCvEORvdSuC77sS9ZAFxLfTqx9Gu" ["file"]=&gt; string(30) "C:\fakepath\Blessed Divine.png" ["document_type"]=&gt; string(4) "file" ["evaluation_session_id"]=&gt; string(1) "2"

以上是关于为啥 laravel $request->file 返回 null?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Laravel 跳过第二个 Foreach()

Laravel 表单验证,为啥我的视图中没有可用的 $errors 变量?

laravel在使用GuzzleHttpPsr7Request报错SymfonyBridgePsrHttpMessageFactoryHttpFoundationFactory not f

从 PHP 控制器使用 request.post() 调用 python 脚本永远不会返回。为啥?

为啥只有一些 laravel 路由返回模型属性?

Laravel: 在数组中