Как сохранить изображения в Laravel? - PullRequest
0 голосов
/ 19 июня 2019

Я получаю изображение из формы пользователя.Мне нужно изменить размер изображения и сохранить его до public/images.Ссылка на картинку должна быть сохранена в базе данных.Теперь у меня есть временное хранилище файла /tmp/phpNgculU, хранящегося в базе данных.Соответственно не могу отобразить изображение в браузере.Помогите мне в изменении моего кода.Я действительно не понимаю, где моя ошибка.Это должно быть сделано без php artisan storage:link

Это часть метода «обновления» моего контроллера:

if(!empty($request->file())) {
    $task->images = $request->file('file');
    $img = Image::make($task->images)->resize(320, 240, function ($constraint) {
        $constraint->aspectRatio();
    });
    $imgName = rand(11111, 99999).'.'.$task->images- >getClientOriginalExtension();
    $img->storeAs('images/', $imgName);
}

Я также получаю сообщение об ошибке:

Команда (StoreAs) недоступна для драйвера (Gd).

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Вы можете использовать Laravel Хранение файлов

Форма HTML

 <form method="post" action="/upload" enctype="multipart/form-data">
        {{ csrf_field() }}
        <input type="file" name="image">
        <button type="submit">Submit</button>
    </form>

Помощник метода изображения

public static function saveImage($image, $path, $option){
    try {
        if($image != null) {
            $image_path = $image->store($path, $option);
            return $image_path;
        } else {
            return null;
        }
    } catch (\Exception $e) {
        echo 'Image Helper saveImage ' .$e->getMessage();
        }
    }

Контроллер

public function store(Request $request){
        $category = new Category;
        $category->name = $request->name;
            if($request->has('image')){
                $category->image_path = saveImage($request->file('image'),'category', 'public');
            }
        $category->save();
        return $category
    }

0 голосов
/ 19 июня 2019

Вы можете сделать это:

Если вы хотите сохранить путь для загруженного изображения, вам нужна таблица базы данных.

Schema::create('images', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('path');
            $table->timestamps();
        });

И модель Image:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
    protected $table = 'images';
    protected $fillable = [
      'path',
      'name',
    ];
}

создайте каталог repository на app\Repositories (возможно, вам также необходимо создать каталог):

namespace App\Repositories;

use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\Response;

class ImageRepository
{
    /**
     * Upload the image
     * @param $image
     * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
     */
    public function uploadImage($image, $name=null)
    {
        return $this->upload($image);
    }
    /**
     * Upload the image
     *
     * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
     */
    private function upload($image, $name=null)
    {
        try{
            $name == null ? $name = uniqid() : $name = $name;
            $path = Storage::disk('public')->put('images', $image);
            $uploadedImage = Image::create([
                'path' => $path,
                'name' => $name,
            ]);
            return $uploadedImage;
        }catch (\Exception $exception){
            return response('Internal Server Error', Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }
}

Код вашего контроллера:

//Create a variable to the image repository:
private $imageRepository;

public function __construct(ImageRepository $imageRepository)
{
    $this->imageRepository = $imageRepository;
}

//In your update function:
public function update(Request $request)
{
    $image = Input::file('file'); //i think you call your input on the html form as 'file'
    $img = Image::make($image)->resize(320, 240, function ($constraint) {
        $constraint->aspectRatio();
    });
    $imgName = rand(11111, 99999).'.'.$image->getClientOriginalExtension();
    $this->imageRepository->uploadImage($img, $imgName);

    //Continue your logic here
}

Помните: вам нужно добавить enctype в HTML-форму:

enctype = "multipart / form-data"

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...