#php #json #laravel #image
#php #json #laravel #изображение
Вопрос:
Я пытаюсь загрузить изображение в postman, в моем json есть два объекта, и он выглядит так:
{
"user_profile": {
"email": "shahzad176@ovadamd.com",
"password": "admin123",
"password_confirmation": "admin123",
"status": 0,
"first_name": "Shahzad",
"middle_name": "Hussain",
"last_name": "Shah",
"date_of_birth": "2015-01-01",
"gender": "M",
"area_id": 1,
"address": "Minhatten NY",
"city": "New York",
"state": "Washington",
"zip": "12312",
"fax": "111-111-1111",
"phone_extension": "2471",
"work_phone": "111-111-1111",
"phone_no": "111-111-1111",
"emergency_contact": "111-111-1111",
"social_security": "111-11-1111",
"module_id": 6
},
"privileges": {
"is_super_admin": 0,
"facilities": [
{
"facility_id": 1,
"is_facility_supervisor": 0,
"speciality_id": 1,
"priv_key": "ced",
"role_id": 2
}
]
}
}
Мой контроллер:
$body = $request->all();
$userProfile = $body['user_profile'];
$userPrev = $body['privileges'];
$userProfile['is_super_admin'] = $userPrev['is_super_admin'];
$facilities = $userPrev['facilities'];
$bodyObj = array_merge($userProfile, $userPrev);
$validator = UserValidations::validateUser($bodyObj);
if ($validator->fails()) {
return response([
'status' => false,
'message' => __('messages.validation_errors'),
'errors' => $validator->errors()->all()
], 200);
}
DB::beginTransaction();
try{
$photoName = time().'.'.$request->image->getClientOriginalExtension();
$request->image->move(public_path('profile_images'), $photoName);
$path = asset('public/profile_images/'.$photoName);
$this->user->where('id', Auth::user()->id)->update(['profile_pic' => $path]);
у меня есть два разных объекта в моем json, и я хочу загрузить изображение профиля пользователя, и я использую form-data и загружаю изображение [], но там написано undefined index user_profile, где я делаю неправильно?
Ваша помощь будет высоко оценена!
Комментарии:
1. Опубликуйте скриншот окна Postman, в котором вы выбираете изображение
2. я публикую снимок экрана, пожалуйста, смотрите
3. я также поделился снимком экрана с моими объектами тела json
Ответ №1:
Возможно, вам нужно преобразовать ваше изображение в данные base64, и вы можете использовать один пакет, чтобы упростить это.
Может быть, ваш код будет выглядеть так
public function saveImage() {
$data = Input::all();
$image_url = "image-".time().".png";
$image_path = public_path().'img/' . $image_url;
Image::make(file_get_contents($data->base64_image))->save($image_path);
$response = array(
'status' => 'success',
);
return Response::json( $response );
}
Фактический код из одного из моих проектов
$base64Img = $request->input('image');
$name = time() . '.' . explode('/', explode(':', substr($base64Img, 0, strpos($base64Img, ';')))[1])[1];
$path = public_path() . '/img/notices/' . $name;
Image::make(file_get_contents($base64Img))->save($path);
Ваш код
try{
$base64Img = $request->input('image');
$photoName= time() . '.' . explode('/', explode(':', substr($base64Img, 0, strpos($base64Img, ';')))[1])[1];
$path = asset('public/profile_images/'.$photoName);
Image::make(file_get_contents($base64Img))->save($path);
$this->user->where('id', Auth::user()->id)->update(['profile_pic' => $path]);
вместо $request->image->move()
этого вам нужно использовать file_get_contents()
.
и добавить
use InterventionImageImageManagerStatic as Image;
в верхней части вашего контроллера.
Очень важно отправить правильное изображение в формате base64 в запросе
формат примера
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAFAAlgDASIAAhEBAxEB/8QAHQABAAICAwEBAAAAAAAAAAAAAAEIBgcEBQkCA//EAEIQAQABAwIDBAUIBwYHAAAAAAABAgMEBREGBxIIITGBE0FhcZEUFhgiQlFUlBUyUlWCkrEjU6Gio9IkM0NicrLR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAwDAQACEQMRAD8AtCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAImTcEiNzcEiNzcEiNzcEiNzcEiNzcEiNzcEiNzcEiNzcEiNzcEiNzcEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJCRQAAAAAAHC1vUsfRtHztSza jGxLNd 5P/bTEzP9FSa 1VxP1VdGh6L07928Xd9v5yi4Yp39Krin9x6J8Lv 8 lVxT 49E F3/eguIKd/Sq4p/ceifC7/vZZyr7RWq8U8d6XomuabpuLiZ1c2Yu4/XFUXJieiPrVTG0z3eYLMAKAAAAAAJgIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESEigAAAAADRva54p/QvLmjSLNfTk6xei1MRPf6Kjaqufj0x5qTNx9qnij5wc0snDs19WJpFuMOiI8OvxuT8Z2/hacQB9UUVXK6aKKZqrqnaKYjeZlzcnSNSxbNV3K07Ms2qfGu5YqppjzmAcByMHKvYObj5eLXNF xcpu26o8aaqZ3ifjD8AHpfwTrtnifhLSdax5jozcai7MR9mqY tT5Vbx5O7V27GvFEZ3Cmp8OX7n9tp1709mmfH0Vzx291UT/ADLEgAKAAAAJgIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESEigAAAA6XjXXbPDHCWra1kbdGDjV3oiftVRH1Y852jzd0rr2yuJ/kPCumcOWLm13Ub3p70RP/St ET76pj VBUbOy72dm5GXlVzXfv3KrtyufGqqqZmZ MuOANqdm 1h3eZuBGdawLk01W6rPyui5Vtc9JRtNvo8K/umr6v3ro8yqMW7wLrNGfRh3MWbH16cymuqzMbx tFH1pjfbw9agPLvjDP4I4pw9X0 7eppt3KPlFm3X0/KLUVRVVbmfunZcbn/wAfZHDPKuzn6ZTfs5mrxRax71u5FNWNNVPX1b vuiY7vvBRa9t6Svbbbedtn5vquqaqpqqneqZ3mXyDZnZ34ojhbmrpN69c6MPNq Q5G87R03O6mZ91XTK/7y3t11W66a6Jmmumd4mPGJejfKjiani/l9omsdUTevWIpv8Af4Xafq1/4xM YMtAUAAAATAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkJFAAAAB5/9ofin5081dXv2bnXiYdXyLHmJ3jpt90zHvq6p810 bHE1PCHL3W9Y6opvWbE0WO/xu1fVo/xmJ8nnHcrquV1V1zNVVU7zM Myg QAStv2qo25McJ y/Yj/QqVIjvW87V1MxyZ4Y9mVYj/QrBUIABarsX8U9VjWeFsiv9SYzsaJn1TtTciP8AJPnKqrNeTnFE8Icx9E1Wa5px6b0Wcj7ptV/Vq390Tv5A9FgpneN4nePVIoAAAAmAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARISKAAAIqmIiZmYiI75mfUCr3bQ4p6bOi8LY9ffVM52TET6o3ptxP efKFVma84 J6uL Y t6tTX1Y9V6bOP8AdFqj6tO3viN/NhSAACYnae53 u8Z8Sa/p9rB1rW8/Ow7VUV27N 7NVNMxG0TET7JmHQbAIEoASgB6E8g J/nZyt0bMu3OvLx7fyTImfHrt928 npnzbCVG7GXFHyXX9X4av3NrebajKsRP95R3VRHvpnf8AhW5AAUAATAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkJFAABrzn7xR80 Vus5lqvoy8ij5HjbePXc7t491PVPk2GqN2zeKPlXEOkcNWK97eFanKv0x/eV91MT7qY3/iQVuQADvOCeHcnizirTNCwaqaL bei1FdXfFEeNVU 6ImfJ0baXZnyreJzo4fm7EbXZu2qd/VVVbq2Bb7gHlTwpwVg27Wn6ZYyMyKdrmbk0Rcu3J9c7z rHsjaGU5Wg6Rl49djK0vBvWa42qorx6JiY9sbOyAVG7S3JrS GtK dPCtqcXEpu028vCiZmijqnaK6PujfaJj2xsrcvv2nMq1i8ltei743vQ2qP/KbtP8A8lQiQQADIeX/ABDc4U4z0fW7W/8AweRTXXEfao8K486ZmHpLi37WVjWcjHriuzeoi5RVHhVTMbxPweXS9/Zg4p cnKvBs3rnVmaVVOFd3nv6ae if5ZiPIG2wFAAEwECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJCRQAB WVkWsTFvZGRXFFmzRNyuqfCmmI3mfg82eP8AiC5xVxnrGt3pnfMyKrlET9mjfamPKmIhdDtP8U/NzlXnWLVzpzNVqjBtRE7T0z33J/liY84UQQQAAzjkniZGbzY4VtYcT6WM 3cmY9VNM9VU/CJYQs32MuEvTahq3FWTb3osR8ixZmPt1bTcmPdHTH8Ugs1xTr2n8MaBm6zq970ODiUekuVRG8z6oiI9czMxER7WuOVnPPQuYGv3dGs4eVp2dNM149N qmqL9Md87THhVEd 33b9747VmFl5vJ3PnDprqpx8izfvU0x424nafKJmJ8lXOzvhZedzj4bjBirexfm/dqj7Nummerf2THd5wCyva9xMjJ5S lx qbePn2bt6I/Y2qp3nzqhSKfF6acWaHjcScNalo2bH9hm2K7NU/s7x3THtidp8nmxremZGjaxm6bnUTRlYl6uxcp 6qmdp/oDggAN99kDij9E8f5GiX69sfV7O1ETPd6a3vVT8aeuPg0I7LhzVsjQdf07VsKqacjCv0X6JifGaZidvPwB6cjg6HqWPrOjYOp4dUVY2ZZov25j9mqImP6ucoAAmAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARISKAEgpd2v KP0tx/j6JYr3xtIsbVRE903rm1VXwp6I LQq et8guCNa1fN1PUbOo3szLu1Xrtc5lXfVVO8 6HC jdy9/Cah cqQUZF5vo3cvfwmofnKj6N3L38JqH5yoFGnoRyA0e1o3KHhuzbpiKr PGVcn76rk9f9JiPJjn0buXv4TUPzlTa g6XjaHouDpeD1xiYdmmxaiurqqimmNo3n190A5eRZt5Fm5Zv26Llm5TNFdFcb01RPdMTHrhj/CvBHDXCd7Ju8OaNiafdyf bXap tVHjtvPhHsjuZGAKNdrHRrel83MnIs0dNGo41rKnbw6 ir/wBN/NeVgHH3KThbjvWLWpcQ2sy7k2rMWKPRZE0UxTEzPhHtmQeeYvN9G7l7 E1D85UfRu5e/hNQ/OVAoymF5fo3cvfwmofnKj6N3L38JqH5yoHC7I/FH6a5cV6RfudWTo96bURM9/oq96qP8eqPJvJgnL/lXw1wDqGTmcOUZlq7k2vRXabuRNdNUb7x3T64 /2yzsABRMBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAbGwAbGwAbGwAbGwAbGwAbGwAbGwAbGwAbGwAbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9k=
формат будет выглядеть
data:image/jpeg;base64,/ base64($image)
Комментарии:
1. это будет еще одна функция, которую я хочу сохранить для изображения в одной функции, как я поделился выше
2. @syed1234 почему вам нужно создать другую функцию, я привел пример кода, вы можете использовать его в своей собственной функции.
3. @syed1234 Я обновил свой ответ, пожалуйста, взгляните на него, примерно он будет похож на то, что я опубликовал.
4. вы использовали Image:make (но у меня не было никакой модели изображения. я сохраняю свое изображение в пользовательской модели?
5. @syed1234 Я упомянул один пакет
intervention
, который вам нужно установить, а затем использоватьuse InterventionImageImageManagerStatic as Image;
поверх вашего контроллера.