首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件上传到laravel 7时始终返回null

将文件上传到laravel 7时始终返回null
EN

Stack Overflow用户
提问于 2020-07-01 10:45:16
回答 2查看 1.8K关注 0票数 2

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

这是视图

代码语言:javascript
复制
{!! 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() !!}

这是我使用的控制器

代码语言:javascript
复制
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上移动()

但是如果我把控制器中的代码转换成更简单的东西,像这样

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-01 10:52:31

使用$request->file('device_document')而不是input方法来捕获文件。

如果您想获取上传文件的原始名称,可以使用getClientOriginalName()方法这样做。

试试这个:

代码语言:javascript
复制
public function store(Request $request)
{
    $this->validate($request, [
        'device_document' => 'nullable|max:8192|mimes:pdf'
    ]);

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

见正式文档这里

票数 0
EN

Stack Overflow用户

发布于 2020-07-01 10:51:14

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

代码语言:javascript
复制
    $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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62675083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档