Как удалить файл из общей папки в laravel 5.1

Я хочу удалить новость из базы данных, и когда я нажимаю кнопку удаления, все данные из базы данных удаляются, но изображение остается в папке с загрузкой. Итак, как мне это работать. благодаря


Это моя функция снова, но не удаляет изображение из папки images/news в общедоступном каталоге>

 public function destroy($id) {
    $news = News::findOrFail($id);
    $image_path = app_path("images/news/{$news->photo}");

    if (File::exists($image_path)) {
        //File::delete($image_path);
        unlink($image_path);
    }
    $news->delete();
    return redirect('admin/dashboard')->with('message','خبر موفقانه حذف  شد');
}

Ответы

Ответ 1

Вы можете использовать метод PHP unlink() так же, как предложил @Khan.

Но если вы хотите сделать это способом Laravel, используйте метод File :: delete().

//Удаление одного файла

File::delete($filename);

//Удаление нескольких файлов

File::delete($file1, $file2, $file3);

//Удаление массива файлов

$files = array($file1, $file2);
File::delete($files);

Ответ 2

Используйте функцию разблокировки php, просто передайте точный путь к файлу, чтобы отключить функцию:

unlink($file_path);

Не забудьте создать полный путь к файлу, если он не хранится в БД. например

$file_path = app_path().'/images/news/'.$news->photo;

Ответ 3

этот метод работал для меня
Сначала поместите строку ниже в начале вашего контроллера:

use File;

ниже пространство имен в вашем php файле

 $destinationPath = 'your_path';
 File::delete($destinationPath.'/your_file');

$ destinationPath → папка внутри папки public.

Ответ 4

Сначала вы должны перейти в config/filesystems.php и установить 'root' => public_path() следующим образом:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => public_path(),
],

Затем вы можете использовать Storage::delete($filename);

Ответ 5

Попробуйте это: Laravel 5.5

public function destroy($id){  
      $data = User::FindOrFail($id);  
      if(file_exists('backend_assets/uploads/userPhoto/'.$data->photo) AND !empty($data->photo)){ 
            unlink('backend_assets/uploads/userPhoto/'.$data->photo);
         } 
            try{

                $data->delete();
                $bug = 0;
            }
            catch(\Exception $e){
                $bug = $e->errorInfo[1];
            } 
            if($bug==0){
                echo "success";
            }else{
                echo 'error';
            }
        }

Ответ 6

Попробуйте использовать:

unlink('.'.Storage::url($news->photo));

Посмотрите точку и конкатенацию перед вызовом фасадного хранилища.

Ответ 7

Используя функцию PHP unlink(), файл будет удален

$path = public_path()."/uploads/".$from_db->image_name;
unlink($path);

Приведенное выше удалит изображение, возвращенное $from_db->image_name в папке public/uploads

Ответ 8

public function destroy($id) {
    $news = News::findOrFail($id);
    $image_path = app_path("images/news/".$news->photo);

    if(file_exists($image_path)){
        //File::delete($image_path);
        File::delete( $image_path);
    }
    $news->delete();
    return redirect('admin/dashboard')->with('message','خبر موفقانه حذف  شد');
}

Ответ 9

Два способа удалить изображение из общей папки без изменения конфигурационного файла файловой системы laravel или возиться с функцией очистки чистого php:

  1. Используя локальное хранилище по умолчанию, вам нужно указать общедоступную подпапку:
Storage::delete('public/'.$image_path);
  1. Используйте публичное хранилище напрямую:
Storage::disk('public')->delete($image_path);

Я бы предложил второй путь как лучший.

Надеюсь, это поможет другим людям.

Ответ 10

самый простой способ удалить изображение новости - использовать событие модели, как показано ниже. и модель удалит изображение, если новость удалена

сначала вы должны импортировать это в начало класса модели use Illuminate\Support\Facades\Storage после этого в классе модели News вы должны сделать это

public static function boot(){
    parent::boot();

    static::deleting(function ($news) {
          Storage::disk('public')->delete("{$news->image}");
    })
}

или вы можете удалить изображение в вашем контроллере с помощью эта команда

Storage::disk('public')->delete("images/news/{$news->file_name}");

но вы должны знать, что диск по умолчанию является общедоступным, но если вы создаете папку в общей папке и помещаете на нее образ, вы должны установить имя папки до $news->file_name

Ответ 11

Сначала убедитесь, что файл существует, создав путь

if($request->hasFile('image')){
    $path = storage_path('app/public').'/YOUR_FOLDER/'.$db->image;
      if(File::exists($path)){
          unlink($path);
      }