无法在我的存储器中存储文件 - laravel

Cannot store file in my storage - laravel

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

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

<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 路由并完成了迁移,但是当我尝试提交表单时出现以下错误:

Error Call to a member function store() on null

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

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

非常感谢

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

$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');
    }