Как я могу сохранить измененное изображение в Laravel

#javascript #php #laravel

#javascript #php #laravel

Вопрос:

Я пытаюсь сохранить новую фотографию в базе данных, которая была изменена, у меня есть javascript (darkroomjs) для обрезки фотографий, но новая фотография не сохраняется в базе данных. Я бы хотел сохранить свою новую фотографию вместо исходной.

 $profile_images = $request['profilefiles'];
$profile_images = explode(";;", $profile_images);
array_shift($profile_images);
$image = "";

foreach ($profile_images as $key => $value) {
    $image_parts = explode(";base64,", $value);
    $image_type_aux = explode("image/", $image_parts[0]);
    $image_type = $image_type_aux[1];
    $image_base64 = base64_decode($image_parts[1]);

    $destinationPath = public_path('images/model/');
    $hardPath = str_random(10) . '.' . $image_type;
    $filename = $destinationPath . $hardPath;
    file_put_contents($filename, $image_base64);

    $image = $hardPath;
}

$model->title = $request['title'];
$model->slug = Slugify::slugify($request['title']);
$model->phone = $request['phone'];
$model->external_link = $request['external_link'];
$model->email = $request['email'];
$model->description = $request['description'];
$model->category = $request['category'];
$model->instagram = $request['instagram'];
$model->category_id = $request['category_id'];
$model->badges_id = $request['badges_id'];
$model->height = $request['height'];
$model->boost = $request['boost'];
$model->waist = $request['waist'];
$model->hips = $request['hips'];
$model->shoes = $request['shoes'];
$model->hair = $request['hair'];
$model->eyes = $request['eyes'];
$model->dress = $request['dress'];
$model->publish = $publish;
$model->age = date('Y-m-d', strtotime($request['dob']));
$model->metatitle = $request['title'];
$model->metadescription = substr(strip_tags($request['description']), 0, 160);

if ($image != "") {
    var_dump($image);
    $model->image = $image;
}
$model->upload_pdf = $upload_pdf;
$model->save();

  

Комментарии:

1. Вы загружаете несколько изображений или одно изображение?

2. Я бы предложил взглянуть на любое изображение.вмешательство. ввод-вывод или docs.spatie.be/laravel-medialibrary/v7/introduction

3. Единственное изображение с идентификатором profileImg. У меня есть несколько моделей с одним изображением для каждой. И в edit-model у меня есть одно изображение, и мне нужно сохранить измененное изображение (с darkroom.js ) вместо исходного изображения, сгенерированного из базы данных.

4. У меня есть другая функция «drag amp; drop» (первая функция ‘profilefiles’), которая загружает и заменяет исходную фотографию другой и сохраняет ее в image /. Я бы хотел использовать что-то подобное для своей функции, если это возможно.

Ответ №1:

введите описание изображения здесь

На изображении выше показан обратный вызов для получения отредактированного изображения.

1) Вы можете сохранить этот файл где-нибудь во временной папке на сервере, выполнив ajax-вызов на сервер.

2) Во время сохранения других полей (POST-запрос). Вы можете просто переместить файл из папки temp в папку images и указать имя файла в DB.

Ссылка:https://github.com/MattKetmo/darkroomjs

Комментарии:

1. Не могли бы вы привести мне пример, пожалуйста? Я не уверен, что я точно понимаю. @Валид Кхан

2. теперь это мой darkroomjs: github.com/andreixfr/andrei/blob/master/darkroomjs

3. Вот ссылка, которая объясняет основы, я надеюсь, это поможет — screencast.com/t/I1hayI2Fo

4. Я видел, что в консоли у меня есть что-то подобное после обрезки: <img src=»data:image / png; base64, и много кода после. Спасибо за ваше изображение. Но я не знаю, как мне следует написать в коде, что я хочу сохранить его во временном режиме. Я также видел это: github.com/MattKetmo/darkroomjs/issues/93 , но я не знаю, как это написать.

5.github.com/MattKetmo/darkroomjs#building github.com/MattKetmo/darkroomjs#usage

Ответ №2:

Вы можете просто

 $path = Storage::put('images/model', $image_base64);
  

Это создаст вам уникальное имя и сохранит его в вашем, storage/app а не общедоступном (что вам и нужно сделать, а не сохранять в самом public/ каталоге).