Ошибка удаления файла Laravel 5

Существует проблема, связанная с моим веб-приложением 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. !!

Я также попробовал Место хранения класс для удаления файла. Но нет пути !!! ..

Как я могу решить эту проблему? Есть идеи… 🙁

6

Решение

Вы делаете это неправильно. Вы не можете удалить файл из 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);
}
7

Другие решения

Если у вас есть файл 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);
3

В 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');
0

Что-то, что заняло у меня довольно много времени, чтобы понять сегодня:

В случае, если вы пытаетесь удалить список файлов, упакованных в собственную оболочку 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
0
По вопросам рекламы [email protected]