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