【问题标题】:Cannot store file in my storage - laravel无法将文件存储在我的存储中 - laravel
【发布时间】:2021-11-08 19:09:11
【问题描述】:

我正在尝试通过表单将一些文件上传到我的数据库以及我的项目的存储中

我在主页上做了以下代码:

<x-layout>

    @if (session('message'))
        <div class="alert alert-success">{{session('message')}}</div>
    @endif

    <div class="container vh-100">
        <div class="row h-100 w-100 align-items-center">
            <div class="offset-3 col-6">
                <form method="POST" action="{{route('transfer.submit')}}" class="card" enctype="multipart/form-data">
                    @csrf
                    <div class="border w-100" id="fileWrapper">
                        <div class="mb-3 w-100 h-100">
                            <input type="file" class="form-control w-100 h-100 fileInput" id="fileupload" name="files[]"  multiple >
                        </div>
                    </div>
                    <div class="mb-3">
                      <label for="exampleInputPassword1" class="form-label">Invia file a </label>
                      <input type="email" class="form-control" id="exampleInputPassword1" name="recipient_mail">
                    </div>
                    <div class="mb-3">
                        <label for="exampleInputPassword1" class="form-label">La tua mail</label>
                        <input type="email" class="form-control" id="exampleInputPassword1" name="sender_mail">
                      </div>
                    <div class="mb-3">
                      <input type="text" class="form-control" id="title" name="title">
                    </div>
                    <div class="mb-3">
                       <textarea name="message" cols="50" rows="10"></textarea>
                      </div>
                    <button type="submit" class="btn btn-primary">Submit</button>
                </form>
            </div>
        </div>
    </div>
</x-layout>

然后我在我的模型中做了以下操作:

protected $fillable = [
        'recipient_mail',
        'sender_mail',
        'title',
        'message',
        'files[]'
    ];

以及我的控制器中的以下内容:

 public function transferSubmit(TransferRequest $request){
        
        $transfer = Transfer::create([
            'sender_mail'=>$request->input('sender_mail'),
            'recipient_mail'=>$request->input('recipient_mail'),
            'title'=>$request->input('title'),
            'message'=>$request->input('message'),
            'files'=>$request->file('files[]')->store('public/files'),
        ]);

        return redirect(route('home'))->with('message', 'File inviato con successo');
    }

我还创建了POST 路由并完成了迁移,但是当我尝试提交表单时出现以下错误:

在 null 上调用成员函数 store() 时出错

在此之后,我尝试使用 dd($request) ro 检查我实际传递给 Trasnfer 类的数据,我发现它正确接收了包括文件数组在内的所有数据。

有没有人可以帮助我理解为什么会出现这个错误?

非常感谢

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    您想要存储多个文件。你会得到一个数组。然后你必须像这样迭代你的文件数组。

    $files = [];
    if($request->hasfile('files[]'))
    {
        foreach($request->file('files[]') as $file)
        {
            $files => $file->store('public/files'),
        }
    }
    

    重要提示: 在使用 Laravel 存储之前不要忘记符号链接。 php artisan storage:link

    更新 您首先迭代,然后您拥有包含图像路径的文件数组。然后你可以将它传递给你的模型。

    一点提示:来自表单的数据应该始终经过验证。

     public function transferSubmit(TransferRequest $request){
       
        $files = [];
        if($request->hasfile('files[]'))
        {
            foreach($request->file('files[]') as $file)
            {
                $files => $file->store('public/files'),
            }
        }
         
            $transfer = Transfer::create([
                'sender_mail'=>$request->input('sender_mail'),
                'recipient_mail'=>$request->input('recipient_mail'),
                'title'=>$request->input('title'),
                'message'=>$request->input('message'),
                'files'=> $files;
    
            return redirect(route('home'))->with('message', 'File inviato con successo');
        }
    

    【讨论】:

    • 非常感谢您的回复,我应该在 create() 方法还是在函数内部进行迭代并将文件传递给 create()?
    • 嗨@gianmarcovarrone!我更新了我的回答。您可以在 transferSubmit() 函数中执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 2020-01-24
    • 2020-11-26
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多