【问题标题】: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') 也不起作用?

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

【问题讨论】:

    标签: laravel file-upload jquery-file-upload


    【解决方案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" }
    猜你喜欢
    • 2016-11-08
    • 2018-04-21
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多