我是Laravel的新人。我试图从我的项目的公共文件夹中删除一些文件。定义'删除'功能如下
public function delete($id)
{
$files = File::find($id);
$filedelete = $files['name'];
Storage::delete('public/upload/',$filedelete);
$files->delete();
return back();
}
当我在视图中按删除输入时
<a href="{{ action('FileController@delete',$link['id']) }}" class="btn btn warning">
<button id="elimina" class="btn btn-danger" type="submit">Elimina</button>
</a>
在web.php
中使用此路线Route::get('/showFile/{id}/delete',['as'=>'delete', 'uses'=>'FileController@delete']);
它给了我这个错误消息
unlink(C:\wamp64\www\laravel\[nameproject]\storage\app\public/upload): Permission denied
(尝试)尽可能清楚,我在数据库和此文件夹中上传文件。 $ id是表的主键,其中包含此文件的引用。我认为我的问题在于$ files [&#39; name&#39;]因为如果我写了文件的确切名称就行了。但我确实需要将此删除动态化。我希望明确,如果没有,我很抱歉。
提前多多感谢。一切顺利。
PS在功能删除中使用此行,它可以正常工作
Storage::delete('public/upload/[filename]');
修改
$files = File::find($id);
$filedelete = $files['name'];
return "".$filedelete;
它会返回正确的文件名。那么,我的问题是如何从该文件夹中删除它?
答案 0 :(得分:1)
你说你在db中存储了对文件的引用,所以这应该有效:
$files = File::find($id);
Storage::delete('public/upload/'.$files->filePathColumnName);
改变了,到了。在你的删除。 可能会用:
public_path().'/uploads/'.$files->filePathColumnName
取决于您在db
中放置了多少路径答案 1 :(得分:0)
当我打开文件时,这个错误发生在我身上:
$handle = @fopen($filepath, "r");
但阅读后没有关闭它。
为了解决这个问题,我在阅读文件内容后添加了一个文件关闭命令
fclose($handle);