首页 > 解决方案 > 将文件上传到 laravel 7 时总是返回 null

问题描述

我在将文件上传到 laravel 时遇到问题,它的 pdf 或图像总是返回到null

这是视图

{!! Form::open(['action' => 'TransactionInController@store', 'method' => 'POST', 'autocomplete' => 'off', 
'class' => 'form-horizontal', 'enctype' => 'multipart/form-data']) !!}
            <div class="row">
                {{ Form::label('Device Document', '', ['class' => 'col-sm-2 col-form-label']) }}
                <div class="col-sm-7">
                    {{ Form::file('device_document') }}
                    <p style="color: red;">@error('device_document') {{ $message }} @enderror</p>
                </div>
            </div>
{!! Form::close() !!}

这是我使用的控制器

public function store(Request $request)
{
    $this->validate($request, [
        'device_document' => 'nullable|max:8192|mimes:pdf'
    ]);

    $transactionsin = new TransactionIn;
    $imageName = $request->input('device_document');  
    $request->image->move(public_path('document-image'), $imageName);
    $transactionsin->save();
    
    return redirect('/transactionsin');
}

我知道它之前被问过,我已经尝试了几种方法来上传文件这个错误。

这是我在运行代码时收到的错误消息

在 null 上调用成员函数 move()

但是如果我将控制器中的代码更改为像这样更简单的代码

public function store(Request $request)
{
    $this->validate($request, [
        'device_document' => 'nullable|max:8192|mimes:pdf'
    ]);

    $transactionsin = new TransactionIn;
    $transactionsin->device_document = $request->input('device_document');
    $transactionsin->save();
    
    return redirect('/transactionsin');
}

它不会返回任何错误消息,但会保存null在数据库中。

标签: phplaravellaravel-7

解决方案


您可以使用 file() 方法而不是输入法访问文件,并在上传图像后使用asset() 函数获取图像路径,如下代码所示

    $transactionsin = new TransactionIn;
    $image= $request->file('device_condition'); 
    //upload imaage
    $image->move(public_path('document-image'), $image->getClientOriginalExtension());
    //asset() function use store path
    $transactionsin->device_document =  asset('document-image/'.$image->getClientOriginalExtension());
    $transactionsin->save();

推荐阅读