在上传图片时出现“调用空值成员函数storeAs()”的错误。

3

我试图将图片上传到我的数据库,一切似乎都很顺利,但当我上传图片时,我会收到以下错误:

调用空对象上的storeAs()成员函数

看起来很正常,但我仍然遇到了这个错误。

控制器

function Create(Request $request){
        $book = Book::create([
            'name' => $request->book_name,
            'writer_name' => $request->writer_name,
            'isbn' => $request->book_isbn,
            'image' => $request->file('book_image')->storeAs('public/images', $id.'.jpg'),
        ]);
        $book->save();
        return redirect('/');
    
    }

HTML

<input class="form-control" type="file" name="book_image" id="book_image" placeholder="Image">

路由

Route::post('create','EditController@Create');

你的 <form> 标签长什么样? - Tim Lewis
@TimLewis <form method="POST" action="update"> - libosch
1个回答

3
当您上传图片到 Laravel 时,需要包含正确的 enctype
<form method="POST" action="{{ url('/update') }}" enctype="multipart/form-data">
  @csrf
  <input class="form-control" type="file" name="book_image" id="book_image" placeholder="Image">
  ...
</form>

如果你不包含 enctype="multipart/form-data",那么 $request->file('book_image') 总是为 null
另外,你应该添加一些验证来强制上传图像,确保它是有效的图像格式: https://laravel.com/docs/7.x/validation#rule-required
https://laravel.com/docs/7.x/validation#rule-image 要显示图像,您应该能够使用以下代码:
@foreach($books as $book)
  <img src="{{ asset($book->image) }}"/>
@endforeach

编辑:从saveAs()方法中删除单词public

'image' => $request->file('book_image')->storeAs('images', uniqid().'.jpg')

这样,它应该可以与asset()帮助程序一起使用。


我把路径改成了“public/images”,但还是一样的。 - libosch
抱歉打扰您,我有一个最后的问题... 'image' => $request->file('book_image')->storeAs('public/images', $request->id.'.jpg'()),我的代码现在看起来像这样,但它没有保存扩展名... 我做错了吗?还是有其他方法可以做到? - libosch
请更新您的问题并附上您现在正在使用的代码;从评论中很难看出您正在使用哪些代码(在评论中格式化它们有点难以阅读)。 - Tim Lewis
1
很高兴能帮忙,你的项目并不是无用的;这几乎与我通过第一次编码作业测试获得我的第一份编码职业(旅游地点数据库与图像上传模块)如出一辙,所以如果你能掌握这个,你就处于一个相当不错的位置 :) 继续阅读有关Laravel文件上传的文档,并查看是否有遗漏的地方。祝你好运! - Tim Lewis
1
嗨,Tim!我刚刚解决了添加/storage/到资源的问题。现在我的显示代码是这样的:asset('/storage/'.$book->image)。它完美地工作了,感谢你的所有帮助! - libosch
显示剩余29条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接