За последние 24 часа нас посетили 21955 программистов и 992 робота. Сейчас ищут 679 программистов ...

Почему не удаляется файл?

Тема в разделе "Laravel", создана пользователем GTank, 22 окт 2018.

Метки:
  1. GTank

    GTank Новичок

    С нами с:
    21 июл 2018
    Сообщения:
    31
    Симпатии:
    1
    Хочу написать ну очень простенький загрузчик файлов типа: ms office, pdf, картинок и архивов.

    Столкнулся с проблемой, когда я пытаюсь обновить(метод update) уже зауженный файл (по сути новый должен заменить старый) старый не удаляется, а остаётся там же в папке и дополнительно загружается новый файл.

    А вот при удалении записи у меня всё срабатывает на ура. Удаляется как сама запись та к и последний загруженный файл.

    Можете подсказать где косяк? Что я не так делаю?

    Контроллер
    PHP:
    1. class UploadsController extends AdminController
    2. {
    3.  
    4.     public function __construct()
    5.     {
    6.         $this->template = 'admin.index';
    7.     }
    8.  
    9.     public function index(){
    10.  
    11.         $uploads = Upload::all();
    12.  
    13.         $this->content = view('admin.upload.index',compact('uploads'))->render();
    14.         return $this->renderOutput();
    15.     }
    16.  
    17.     public function create()
    18.     {
    19.         $this->content = view('admin.upload.create')->render();
    20.         return $this->renderOutput();
    21.     }
    22.  
    23.     public function store(Request $request)
    24.     {
    25.         $this->validate($request, [
    26.             'title' =>  'required',
    27.             'file_name' => 'required|file|mimes:jpeg,png,jpg,gif,svg,doc,docx,pdf|max:2048',
    28.         ]);
    29.  
    30.         $upload = new Upload();
    31.         $upload->add($request->all());
    32.         $upload->addFile($request->file('file_name'));
    33.  
    34.         return redirect()->route('uploads.index');
    35.     }
    36.  
    37.     public function edit($id)
    38.     {
    39.         $file = Upload::find($id);
    40.  
    41.         $this->content = view('admin.upload.edit',compact('file'))->render();
    42.         return $this->renderOutput();
    43.     }
    44.  
    45.     public function update(Request $request, $id)
    46.     {
    47.         $this->validate($request, [
    48.             'title' =>  'required',
    49.             'file_name' => 'required|file|mimes:jpeg,png,jpg,gif,svg,doc,docx,pdf|max:2048',
    50.         ]);
    51.  
    52.         $upload = Upload::find($id);
    53.         $upload->add($request->all());
    54.         $upload->addFile($request->file('file_name'));
    55.  
    56.         return redirect()->route('uploads.index');
    57.     }
    58.  
    59.     public function destroy($id)
    60.     {
    61.         Upload::find($id)->remove();
    62.  
    63.         return redirect()->route('uploads.index');
    64.     }
    65. }
    Методы модели которые отвечают за добавление файла, удаление и редактирование
    Код (Text):
    1.  
    2.  
    3. protected $fillable = ['title', 'description', 'file_name'];
    4.  
    5. public function add($fields)
    6.     {
    7.         $this->fill($fields);
    8.         $this->save();
    9.     }
    10.  
    11.     public function addFile($file)
    12.     {
    13.         $this->removeFile();
    14.  
    15.         $filename = str_random(10) . '.' . $file->getClientOriginalExtension();
    16.         $file->storeAs('/uploads/files', $filename);
    17.         $this->file_name = $filename;
    18.         $this->save();
    19.     }
    20.  
    21.     public function removeFile()
    22.     {
    23.         if($this->file_name != null)
    24.         {
    25.             Storage::delete('uploads/files/' . $this->file_name);
    26.         }
    27.     }
    28.  
    29.     public function remove()
    30.     {
    31.         $this->removeFile();
    32.         $this->delete();
    33.     }
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
     
  3. GTank

    GTank Новичок

    С нами с:
    21 июл 2018
    Сообщения:
    31
    Симпатии:
    1
    :( Call to a member function add() on null
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    PHP:
    1. $upload= Upload::find($id);
    2. $upload->removeFile();
    3. $upload->add();
    4. $upload->addFile();
     
    GTank нравится это.
  5. GTank

    GTank Новичок

    С нами с:
    21 июл 2018
    Сообщения:
    31
    Симпатии:
    1
    :eek:Работает. Спасибо. Почему-то я отверг этот способ. Сам не знаю почему. Изначально вообще не стал его пробовать.

    В принципе вопрос решен. Тему можно закрывать.;)