#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.
Комментарии:
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/
каталоге).