Laravel 5.4:如何删除存储在应用程序中的文件

时间:2017-07-12 18:24:03

标签: php laravel laravel-5.3

我想删除存储在storage / app / myfolder / file.jpg中的文件。我尝试过以下代码,但这些都不起作用:

use File    
$file_path = url().'/storage/app/jobseekers_cvs/'.$filename;
unlink($file_path);

use File
$file_path = public_path().'/storage/app/myfolder/'.$filename;
unlink($file_path);

use File
$file_path = app_path().'/storage/app/myfolder/'.$filename;
unlink($file_path);

还有,

File::Delete('/storage/app/myfolder/'.$filename);

请帮忙。

10 个答案:

答案 0 :(得分:19)

您可以像这样使用Laravels facade Storage

Storage::delete($file);

或者您可以使用它:

unlink(storage_path('app/folder/'.$file));

如果要删除目录,可以使用:

rmdir(storage_path('app/folder/'.$folder);

要提到的一个重要部分是,您应首先检查文件或目录是否存在。

因此,如果你想删除一个文件,你应该这样做:

if(is_file($file))
{
    // 1. possibility
    Storage::delete($file);
    // 2. possibility
    unlink(storage_path('app/folder/'.$file));
}
else
{
    echo "File does not exist";
}

如果你想查看它是一个目录,请执行以下操作:

if(is_dir($file))
{
    // 1. possibility
    Storage::delete($folder);
    // 2. possibility
    unlink(storage_path('app/folder/'.$folder));
    // 3. possibility
    rmdir(storage_path('app/folder/'.$folder));
}
else
{
    echo "Directory does not exist";
}

答案 1 :(得分:5)

我找到了答案。这段代码对我有用。

unlink(storage_path('app/foldername/'.$filename));

答案 2 :(得分:3)

使用storage

//demo 
use Illuminate\Support\Facades\Storage;

Storage::delete($filename);

答案 3 :(得分:2)

Storage Facade的默认根目录是在config / filesystems.php中配置的,默认值为:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

所以您应该使用:

Storage::delete('myfolder/'.$filename)

答案 4 :(得分:0)

此代码对我有用。

use Illuminate\Support\Facades\Storage;
....
$storagePath  = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix();
if(file_exists($storagePath.$file)) unlink($storagePath.$file);

答案 5 :(得分:0)

delete方法接受单个文件名或要从磁盘中删除的文件数组:

use Illuminate\Support\Facades\Storage;

Storage::delete('file.jpg');

Storage::delete(['file.jpg', 'file2.jpg']);

如有必要,您可以指定应从中删除文件的磁盘:

use Illuminate\Support\Facades\Storage;

Storage::disk('s3')->delete('folder_path/file_name.jpg');

删除目录

最后,可以使用deleteDirectory方法删除目录及其所有文件:

Storage::deleteDirectory($directory);

答案 6 :(得分:0)

尝试:

unlink(public_path('uploads\users'). DIRECTORY_SEPARATOR .$user->image);

这对我有用。

答案 7 :(得分:0)

例如,更新客户资料图像并删除旧图像

数据库中存储的文件($ customer->图像)

/storage/customers/mhPKW870zGFupAZLI5cwNLoHTAuguCQWoBrDXJCU.jpeg

更新方法

if ($request->file('image')) {
  if ($customer->image) {
      // get filename
      $filename = str_replace('/storage/customers/', '', $customer->image);
      // remove old image
      unlink(storage_path('app/public/customers/'.$filename));
  }
  // add new image
  $path = Storage::putFile('public/customers', $request->file('image'));
  $url = Storage::url($path);

  $customer->image = $url;
}
       
$saveResult = $customer->save();

答案 8 :(得分:0)

对于本地存储使用这个

use Illuminate\Support\Facades\Storage;

Storage::disk('local')->delete('folder_path/file_name.jpg');

对于 S3 存储桶使用这个

use Illuminate\Support\Facades\Storage;

Storage::disk('s3')->delete('folder_path/file_name.jpg');

答案 9 :(得分:0)

path my file

例如,我将我的文件存储在该路径中,因此我使用此代码删除 020521_0204_17111623001_8340.pdf

Storage::delete('files/8340/020521_0204_17111623001_8340.pdf');

因为默认在 config/filesystems.php 中,默认路径是 storage_path('app/public')。