Laravel。取消链接('文件路径'):权限被拒绝

时间:2017-09-22 21:40:47

标签: php laravel

我是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;

它会返回正确的文件名。那么,我的问题是如何从该文件夹中删除它?

2 个答案:

答案 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);