Laravel 5.4: как удалить файл, хранящийся в хранилище/приложении

Я хочу удалить файл, который хранится в файле 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);

Пожалуйста помоги.

Ответ 1

Вы можете либо использовать 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";
}

Ответ 2

Используйте хранилище

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

Storage::delete($filename);

Другой способ,

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

Ответ 3

Я нашел ответ. Этот код работал для меня.

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

Ответ 4

Этот код работал для меня.

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

Ответ 5

Метод 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);