无法在我的存储器中存储文件-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路由并完成了迁移,但当我尝试提交表单时,我收到了以下错误:

错误调用空上的成员函数store((

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

有人能帮助我理解为什么我会犯那个错误吗?

非常感谢

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

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

最新更新