如何使用 Storage 门面删除文件
Posted
技术标签:
【中文标题】如何使用 Storage 门面删除文件【英文标题】:How to use Storage facade to delete a file 【发布时间】:2021-11-11 17:58:12 【问题描述】:当我使用 php unlink 方法时,我可以使用以下逻辑从本地驱动程序中删除图像,但是当我使用 Storage 门面时,帖子被删除但图像没有被删除。我尝试过使用 Facade 方式,但似乎无法正常工作。我错过了什么?
public function destroy(Post $post)
// unlink('storage/'.$post->imagePath);
Storage::delete('storage/'.$post->imagePath);
$post->delete();
return redirect(route('posts.index'))->with('flash', 'Post Deleted Successfully');
【问题讨论】:
不要在删除方法中传递storage/
。存储门面 ID 自动使用 storage
目录中的文件。
我在通过 storage/ 之前尝试了 Storage::delete($post->imagePath);
,但效果不佳。
【参考方案1】:
您必须了解(默认情况下)Storage
外观会查看 /your/project/storage/app
。
这是root
目录。
如果我们假设:
您的项目位于/home/alphy/my-project
$post->imagePath == 'posts/18/picture.png'
...然后:
所有Storage
门面方法,包括delete()
,copy()
,path()
...当你给他们$post->imagePath
时会寻找/home/alphy/my-project/storage/app/posts/18/picture.png
所以:
public function destroy(Post $post)
Storage::delete('storage/'.$post->imagePath);
// tries to delete /home/alphy/my-project/storage/app/storage/$post->imagePath
// which is probably wrong
$post->delete();
return redirect(route('posts.index'))->with('flash', 'Post Deleted Successfully');
【讨论】:
有道理,我的图像在 ``` /home/alphy/my-project/storage/app/public/postImages/uniqueIdofTheImage```my $post->imagePath
是 postImages/uniqueIdofTheImage
任何想法如何解决它或如何覆盖默认路径?
一切都在config/filesystem.php
中配置。但是,如果图像在storage/app/public
,那么你可以简单地做Storage::disk('public')->delete('postImages/uniqueIdofTheImage')
工作,现在我都清楚了...谢谢!以上是关于如何使用 Storage 门面删除文件的主要内容,如果未能解决你的问题,请参考以下文章