8000 add imagebas64 · JAVI-CC/Laravel-API-Server@9d50cb2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9d50cb2

Browse files
committed
add imagebas64
1 parent 1b8815d commit 9d50cb2

File tree

8 files changed

+94
-248
lines changed

8 files changed

+94
-248
lines changed

app/Http/Controllers/JuegoController.php

+4-73
Original file line numberDiff line numberDiff line change
@@ -158,25 +158,13 @@ public function random(Request $request)
158158
* @OA\Property(property="nombre", ref="#/components/schemas/Juego/properties/nombre"),
159159
* @OA\Property(property="descripcion", ref="#/components/schemas/Juego/properties/descripcion"),
160160
* @OA\Property(property="desarrolladora", ref="#/components/schemas/Juego/properties/desarrolladora"),
161+
* @OA\Property(property="imagen", ref="#/components/schemas/Juego/properties/imagen"),
161162
* @OA\Property(property="fecha", ref="#/components/schemas/Juego/properties/fecha"),
162163
* @OA\Property(property="generos[0]", type="string", example="accion"),
163164
* @OA\Property(property="generos[1]", type="string", example="first-person-shooter"),
164165
* @OA\Property(property="generos[2]", type="string", example="multijugador"),
165166
* ),
166167
* ),
167-
* @OA\RequestBody(
168-
* required=true,
169-
* @OA\MediaType(
170-
* mediaType="multipart/form-data",
171-
* @OA\Schema(
172-
* @OA\Property(
173-
* property="imagen",
174-
* description="imagen del juego",
175-
* type="file",
176-
* ),
177-
* ),
178-
* ),
179-
* ),
180168
* security={ * {"SANCTUM": {}}, * },
181169
* @OA\Response(response=201, description="Se ha creado correctamente"),
182170
* @OA\Response(response=220, description="No se cumple todos los requisitos"),
@@ -237,8 +225,8 @@ public function show($slug)
237225
* @OA\Post(
238226
* path="/api/juegos/edit",
239227
* tags={"Juegos"},
240-
* summary="Actualizar un juego con la imagen incluida",
241-
* description="Actulizar un juego ya existente con parametros con la imagen incluida.",
228+
* summary="Actualizar un juego",
229+
* description="Actulizar un juego ya existente",
242230
* operationId="editJuego",
243231
* @OA\Parameter(
244232
* name="Juego",
@@ -249,26 +237,14 @@ public function show($slug)
249237
* @OA\Property(property="nombre", ref="#/components/schemas/Juego/properties/nombre"),
250238
* @OA\Property(property="descripcion", ref="#/components/schemas/Juego/properties/descripcion"),
251239
* @OA\Property(property="desarrolladora", ref="#/components/schemas/Juego/properties/desarrolladora"),
240+
* @OA\Property(property="imagen", ref="#/components/schemas/Juego/properties/imagen"),
252241
* @OA\Property(property="fecha", ref="#/components/schemas/Juego/properties/fecha"),
253242
* @OA\Property(property="generos[0]", type="string", example="aventura"),
254243
* @OA\Property(property="generos[1]", type="string", example="rpg-de-accion"),
255244
* @OA\Property(property="generos[2]", type="string", example="multijugador"),
256245
* @OA\Property(property="slug", ref="#/components/schemas/Juego/properties/slug"),
257246
* ),
258247
* ),
259-
* @OA\RequestBody(
260-
* required=true,
261-
* @OA\MediaType(
262-
* mediaType="multipart/form-data",
263-
* @OA\Schema(
264-
* @OA\Property(
265-
* property="imagen",
266-
* description="imagen del juego",
267-
* type="file",
268-
* ),
269-
* ),
270-
* ),
271-
* ),
272248
* security={ * {"SANCTUM": {}}, * },
273249
* @OA\Response(response=200, description="Success"),
274250
* @OA\Response(response=220, description="No se cumple todos los requisitos"),
@@ -293,51 +269,6 @@ public function update(Request $request)
293269
}
294270
}
295271

296-
/**
297-
* @OA\Put(
298-
* path="/api/juegos/edit",
299-
* tags={"Juegos"},
300-
* summary="Actualizar un juego sin subir la imagen",
301-
* description="Actulizar un juego ya existente con parametros sin la necesidad de subir la imagen.",
302-
* operationId="editJuegoWithoutImage",
303-
* @OA\RequestBody(
304-
* required=true,
305-
* description="{nombre, descripcion, desarrolladora, fecha, generos, slug}",
306-
* @OA\JsonContent(
307-
* required={"slug"},
308-
* @OA\Property(property="nombre", ref="#/components/schemas/Juego/properties/nombre"),
309-
* @OA\Property(property="descripcion", ref="#/components/schemas/Juego/properties/descripcion"),
310-
* @OA\Property(property="desarrolladora", ref="#/components/schemas/Juego/properties/desarrolladora"),
311-
* @OA\Property(property="fecha", ref="#/components/schemas/Juego/properties/fecha"),
312-
* @OA\Property(property="generos", ref="#/components/schemas/Juego/properties/generos"),
313-
* @OA\Property(property="slug", ref="#/components/schemas/Juego/properties/slug")
314-
* ),
315-
* ),
316-
* security={ * {"SANCTUM": {}}, * },
317-
* @OA\Response(response=200, description="Success"),
318-
* @OA\Response(response=220, description="No se cumple todos los requisitos"),
319-
* @OA\Response(response=401, description="No autorizado"),
320-
* @OA\Response(response=500, description="Error interno del servidor")
321-
* )
322-
*
323-
*/
324-
public function updatewithoutimage(Request $request)
325-
{
326-
$juego = $this->juego->show_id($request->input('slug'));
327-
328-
if (isset($juego->original['error'])) {
329-
return $juego;
330-
} else {
331-
$validator = $this->juego->validation_update_without_image($request, $juego->nombre);
332-
if ($validator->fails()) {
333-
return response()->json($validator->errors(), 220);
334-
} else {
335-
$juego = $this->juego->exists_id_update_without_image($juego, $request);
336-
return response()->json(new JuegoResource($juego), 200);
337-
}
338-
}
339-
}
340-
341272
/**
342273
* @OA\Delete(
343274
* path="/api/juegos/delete/{slug}",

app/Models/Imagen.php

+10-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,17 @@ class Imagen extends Model
99
{
1010
public function upload($id, $slug, $imagen, $nombre)
1111
{
12-
$filename = "eliminar." . $imagen->getClientOriginalExtension();
12+
$image_64 = $imagen;//base64 encoded data
13+
$extension = explode('/', explode(':', substr($image_64, 0, strpos($image_64, ';')))[1])[1]; // .jpg .png .pdf
14+
$replace = substr($image_64, 0, strpos($image_64, ',')+1);
15+
//buscar subcadena para reemplazar aquí, por ejemplo: data:image/png;base64,
16+
$imagen = str_replace($replace, '', $image_64);
17+
$imagen = str_replace(' ', '+', $imagen);
18+
$imagen = base64_decode($imagen);
19+
20+
$filename = "eliminar." . $extension;
1321
$filenamePNG = $id . "-" . $slug . ".png";
14-
$imagen->move(public_path('media/'.$nombre.'/'), $filename);
22+
file_put_contents('media/'.$nombre.'/'.$filename, $imagen);
1523
imagepng(imagecreatefromstring(file_get_contents(public_path('media/'.$nombre.'/' . $filename))), public_path('media/'.$nombre.'/' . $filenamePNG));
1624
File::delete(File::glob(public_path('media/'.$nombre.'/eliminar.*')));
1725
}

app/Models/Juego.php

+5-75
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
* @OA\Property(property="nombre", description="Nombre del juego", type="string", example="Test123"),
2020
* @OA\Property(property="descripcion", description="descripción del juego", type="string", example="insertando juego de prueba..."),
2121
* @OA\Property(property="desarrolladora", description="nombre de la desarrolladora que pertenece al juego", type="string", example="Test123 Studios"),
22+
* @OA\Property(property="imagen", description="imagen en base64 que pertenece al juego", type="string", format="base64", example="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg=="),
2223
* @OA\Property(property="fecha", type="string", description="fecha de salida de lanzamiento del juego", example="2021-01-01"),
2324
* @OA\Property(property="generos", type="strin F987 g", description="Slugs de generos ya existentes en la base de datos de tipo array (No se puede insertar generos que no esten registrado en la base de datos).", example={"aventura", "rpg-de-accion", "multijugador"}),
2425
* @OA\Property(property="slug", type="string", description="Url amigable del nombre del juego", example="test123")
@@ -58,7 +59,7 @@ public function validation_add($request)
5859
'fecha' => 'required|date_format:Y-m-d',
5960
'generos' => 'required|array|between:1,5',
6061
'generos.*' => 'required|distinct|exists:generos,slug',
61-
'imagen' => 'required|mimes:jpg,jpeg,png|max:4096|',
62+
'imagen' => 'required|base64mimes:jpg,jpeg,png|base64max:4096|',
6263
]);
6364

6465
return $validator;
@@ -80,28 +81,7 @@ public function validation_update($request, $nombre)
8081
'fecha' => 'nullable|date_format:Y-m-d',
8182
'generos' => 'nullable|array|between:1,5',
8283
'generos.*' => 'nullable|distinct|exists:generos,slug',
83-
'imagen' => 'required|mimes:jpg,jpeg,png|max:4096|',
84-
]);
85-
86-
return $validator;
87-
}
88-
89-
public function validation_update_without_image($request, $nombre)
90-
{
91-
92-
if ($request->nombre == $nombre) {
93-
$exp = '';
94-
} else {
95-
$exp = '|unique:juegos';
96-
}
97-
98-
$validator = Validator::make($request->all(), [
99-
'nombre' => 'nullable|min:2|max:255' . $exp,
100-
'descripcion' => 'nullable|min:10|max:800',
101-
'desarrolladora' => 'nullable|min:2|max:255',
102-
'fecha' => 'nullable|date_format:Y-m-d',
103-
'generos' => 'nullable|array|between:1,5',
104-
'generos.*' => 'nullable|distinct|exists:generos,slug',
84+
'imagen' => 'nullable|base64mimes:jpg,jpeg,png|base64max:4096|',
10585
]);
10686

10787
return $validator;
@@ -179,62 +159,12 @@ public function exists_id_update($id_juego, $request)
179159
}
180160
}
181161

162+
if($request->input('imagen') != null) {
182163
$class_imagen = new Imagen();
183164
$class_imagen->updati($id_juego['id'], $request->input('slug'), $request->imagen, 'juegos');
184165
return $id_juego;
185-
}
186-
}
187-
188-
public function exists_id_update_without_image($id_juego, $request)
189-
{
190-
191-
if ($id_juego == null) {
192-
return response()->json(['error' => 'Juego no encontrado']);
193-
} else {
194-
195-
if($request->input('nombre') != null) {
196-
$slug = $this->sluggable($request->nombre);
197-
$slug_antiguo = $request->input('slug');
198-
$request->request->add(['slug' => $slug]);
199-
//Cambiar el nombre del archivo
200-
$id = $this->where('slug', $slug_antiguo)->first()->id;
201-
}
202-
203-
if($request->input('desarrolladora') != null) {
204-
$desarrolladora = new Desarrolladora();
205-
$desarrolladora = $desarrolladora->similar_name($request->input('desarrolladora'));
206-
$request->merge(['desarrolladora' => $desarrolladora->id]);
207-
}
208-
209-
$id_juego->update($request->only([
210-
'nombre',
211-
'descripcion',
212-
'desarrolladora',
213-
'fecha',
214-
'generos',
215-
'slug'
216-
]));
217-
218-
if($request->input('desarrolladora') != null) {
219-
$id_juego->desarrolladoras()->update(['juegable_id' => $desarrolladora->id]);
220-
}
221-
222-
if($request->input('generos') != null) {
223-
$class_genero = new Genero();
224-
$id_juego->generos()->detach();
225-
foreach($request->input('generos') as $genero) {
226-
$class_genero->findBySlug($genero);
227-
$id_juego->generos()->syncWithoutDetaching($class_genero->findBySlug($genero)->id);
228-
}
229-
}
230-
231-
$class_imagen = new Imagen();
232-
233-
if($request->input('nombre') != null) {
234-
$class_imagen->rename($id, $slug_antiguo, $request->input('slug'), 'juegos');
235-
}
166+
}
236167

237-
return $id_juego;
238168
}
239169
}
240170

composer.json

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"license": "MIT",
1010
"require": {
1111
"php": "^8.0.6",
12+
"crazybooot/base64-validation": "^1.0",
1213
"darkaonline/l5-swagger": "^8.0",
1314
"fideloper/proxy": "^4.0",
1415
"guzzlehttp/guzzle": "^7.0.1",

composer.lock

+60-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/media/juegos/57-test123.png

90 Bytes
Loading

routes/api.php

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
Route::post('/', [JuegoController::class, 'store'])->name('addJuego')->middleware('auth:sanctum');
3030
Route::get('{slug}', [JuegoController::class, 'show'])->name('getJuego');
3131
Route::post('/edit', [JuegoController::class, 'update'])->name('editJuego')->middleware('auth:sanctum');
32-
Route::put('/edit', [JuegoController::class, 'updatewithoutimage'])->name('editJuegoWithoutImage')->middleware('auth:sanctum');
3332
Route::delete('/delete/{slug}', [JuegoController::class, 'delete'])->name('deleteJuego')->middleware('auth:sanctum');
3433
Route::post('/filter/search/', [JuegoController::class, 'filter'])->name('filterJuego');
3534
Route::get('/desarrolladoras/{slug}', [DesarrolladoraController::class, 'show'])->name('getJuegoDesarrolladora');

0 commit comments

Comments
 (0)
0