Существует проблема, связанная с моим веб-приложением laravel 5, касающимся удаления файла.
Я хочу удалить запись из моей таблицы с соответствующим файлом изображения.
Вот моя структура таблицы.
Schema::create('master_brands',function($table){
$table->increments('pk_brand_id');
$table->string('brand_name');
$table->string('brand_logo');
$table->timestamps();
});
Я добавил 3 бренда в БД и сохранил путь к изображению в brand_logo поле вроде: (/ добавление / мастера / logocatagory_Computers & IT.png).
При удалении записи из базы данных я хочу также удалить файл изображения из папки загрузки.
Но Файл не удалялся при выполнении действия удаления.
вот мой контроллер удаления.
public function branddelete($id)
{
$filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
$filname = url()."/app".$filename[0]->brand_logo;
File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png
}
Файл существует в моем каталоге и каталог с разрешением 777. !!
Я также попробовал Место хранения класс для удаления файла. Но нет пути !!! ..
Как я могу решить эту проблему? Есть идеи… 🙁
Вы делаете это неправильно. Вы не можете удалить файл из URL, вы должны указать путь к файлу, а не URL
отредактированный
Предполагая, что файл, который вы хотите удалить, находится в public/uploads/masters/logocatagory_Computers
Вы могли бы сделать это:
public function branddelete($id)
{
$filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
$filname = $filename[0]->brand_logo;
//example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder
$file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}");
if(File::exists($file_path)) File::delete($file_path);
}
Если у вас есть файл Storage / app /, Storage :: не работает, измените /Config/Filesystems.php, попробуйте поместить ваш local в base_path () и прокомментируйте default storage_path (),
'disks' => [
'local' => [
'driver' => 'local',
'root' => base_path(),
// 'root' => storage_path('app'),
],
Потом в контроллере
use Illuminate\Support\Facades\Storage;
Тогда в общественных целях использовать Storage Model
$path= 'uploads/masters/';
Storage::delete($path . $filname);
В Laravel 5.1. При использовании локального драйвера обратите внимание, что все файловые операции относятся к корневому каталогу, определенному в вашем файле конфигурации. По умолчанию это значение установлено на хранение / приложение каталог. Следовательно,
следующий метод будет хранить файл в хранилище / app / file.txt:
Storage::put('file.txt', 'Contents');
это удалит file.txt в хранилище / app
Storage::delete('file.txt');
Если вы хотите изменить корневой каталог, возьмитехранение / приложение / загрузки /‘Например, вы можете установить файл systemystem.php следующим образом:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app/uploads/'),
],
...
тогда этот следующий метод будет хранить файл в хранилище / app / uploads / file.txt:
Storage::put('file.txt', 'Contents');
это приведет к удалению файла file.txt в каталоге storage / app / uploads.
Storage::delete('file.txt');
Что-то, что заняло у меня довольно много времени, чтобы понять сегодня:
В случае, если вы пытаетесь удалить список файлов, упакованных в собственную оболочку Collection от Laravel, вам может потребоваться вызвать ->all()
чтобы получить базовый экземпляр массива:
// The following is an example scenario
$files = Storage::list('downloads');
$collection = collect($files)->filter(function ($file) {
return str_contains($file, 'temp');
});
Storage::delete($collection->all()); // Note the "all()" call here