laravel 7 — Как загрузить файлы на сервер


Как загрузить файлы на сервер с laravel 7

Очередная памятка для самого себя, когда что то получается — стоит это сохранить. Пересмотрел кучу видео, вроде делаешь так-же, а не работает. Ниже рабочий код по загрузке файлов на сервер Laravel 7.

Файлы загружаются, и привязываются сразу к посту $post и к пользователю $id = Auth::user()->id;. Это чтобы потом проще было их найти. ‘user_id’ => $id, ‘post_id’ => $post->id.

 public function store(Post $post, FileRequest $request)

    {

        $id = Auth::user()->id;
        $name = $request->file('fileNew')->getClientOriginalName();
        $storename = '№' . $post->reg. '_'  . date("Y") . '.' . date("m") . '.' . date("d") . '_' . $name;
        $filepath = $request->file('fileNew')->storeAs('uploads', $storename, 'public');

        File::Create([

            'path' => $filepath,
            'name' => $storename,
            'user_id' => $id,
            'post_id' => $post->id
        ]);

        return back();

    }

Маршрут

Route::post('post/{post}/files', [
    'uses' => 'FileController@store',
    'as' => 'post.files',
    'middleware' => 'auth'
]);

Привязки

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class File extends Model
{
    protected $fillable = ['name', 'path','user_id', 'post_id'];

    public function post()
    {
        return $this->belongsTo('App\Post');
    }

    public function user()
    {
        return $this->belongsTo('App\user');
    }
}
 public function files()
    {
        return $this->hasMany('App\File', 'post_id');
    }
public function files()
    {
        return $this->hasMany('App\File');
    }

Загрузка и отображение

<div class="card p-2">

                        <h4 class="p-3">Добавить файл</h4>

                        <form action="{{$post->id}}/files" method="post" enctype="multipart/form-data">

                            @csrf

                            <input type="file" name="fileNew" id="fileNew" class="form-control" required>

                            <button class="btn btn-primary float-right" type="submit">
                                Загрузить
                            </button>

                        </form>

                        <div>

                            <h4 class="p-3">Файлы</h4>
                            <ol>
                                @foreach($post->files as $file)

                                    <li class="my-3">{{ $file->name }}
                                        <A HREF='/storage/app/public/{{ $file->path}}' target=_blank>
                                            <button type='button' class='btn-primary btn-sx float-right'>
                                                <i class="fa fa-download"></i></button>
                                        </A>

                                        <A HREF='/post/{post}/download' target=_blank>
                                            <button type='button' class='btn-danger btn-sx float-right'>
                                                <i class="fa fa-trash"></i></button>
                                        </A>
                                    </li>


                                @endforeach
                            </ol>
                        </div>

                    </div>

                </div>

Думаю это вам пригодится, будут вопросы — задавайте.

Рубрика: laravel

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *