Laravel 5.1文件不从文件夹中删除

时间:2016-10-10 10:25:04

标签: laravel-5.1

我想从我的数据库以及我的public / uploads文件夹中删除pdf文件。它正在从数据库中删除,但不是从我的公共文件夹中删除。

这是我的控制者:

 public function deleteArticle($id) {
    $article = Article::findOrFail($id);

     File::delete($article->document);
        $article->delete();
    return redirect()->back();
   }

   /*This handles the posting of the file into the folder and storing of the url into the datab
   $file = Input::file('document');
   $file->move('uploads', $file->getClientOriginalName());
   $document = asset('uploads/'.$file->getClientOriginalName());

   $newArticle->document = $document;

2 个答案:

答案 0 :(得分:0)

由于您当前正在将数据库保存到数据库(通过使用asset()函数),因此您无法使用该信息删除该文件。

通常只需将文档名称保存在数据库中即可。

  $document = $file->getClientOriginalName();

  $newArticle->document = $document;

要删除该文件,您可以调用:

File::delete(public_path('uploads/'.$article->document);

要链接到您的文件,您可以使用asset()方法

asset('uploads/'.$article->document);

答案 1 :(得分:0)

在数据库中存储完整的URL是一个坏主意。以后很难维护文件。最好的方法是只存储带扩展名的文件名。

如果您只在数据库中有文件名,则可以这种方式删除文件:

$article = Article:findOrFail($id);
$document = $article->document;      // take the image name from database
File::delete('uploads/'.$document);  // delete the file 
$article->delete()                   // delete the record from database

修改

如果您仍想在数据库中使用URL,可以使用substr()strpos()功能获取图像名称。例如:

$image = substr($article->document,0,strpos("uploads/"));

您只能从URL获取文档名称并使用它来删除文件。

要仅存储文件名,请按照以下步骤操作:

$document = $request->file('document')->getClientOriginalName();