Laravel - get con parametros que contienen caracteres especiales

 
Vista:
sin imagen de perfil

get con parametros que contienen caracteres especiales

Publicado por TCOS (2 intervenciones) el 14/02/2024 12:29:33
Hola a todos.

Soy nuevo en Laravel 10 y tengo una duda. Estoy creando un controlador para archivos de imagen protegidos.
He creado un nuevo 'disco' en filesystems.php.
He creado la carpeta y les he puesto subcarpetas y archivos.

He creado el controlador con 2 metodo 'viewFile' i 'viewFile1'.
He creado las rutas GET en routes/web.php.
He creado la vista con el codigo blade.

Bien, si le paso como parametro el nombre del archivo 'iconMale.png' .... funciona bien.
Pero si quiero pasarle una ruta como parametro: 'media2/users/avatar/iconMale.png no funciona

Bien, ya se que no se puede usar '/' en el parametro del GET. En el POST si, y me funciona, pero no se peude utilizar una ruta POST en el src de una imagen .... o yo no se hacerlo al menos.

La primera solucion ha sido substituir '/' por '\' en la ruta .... y funciona

La segunda ha sido con urlencode() ... pero esta no funciona, siempre devuelve 404 y no lo entiendo.
Alguna idea?
Gracias.

RUTAS:
1
2
Route::get( 'privateView/{uriFile}'    ,[privateFilesController::class,'viewFile'])    ->name('privateFiles.view');
Route::get( 'privateView1/{uriFile}'   ,[privateFilesController::class,'viewFile1'])   ->name('privateFiles.view1');

VISTA:
nota: $uriFile = 'images/test/iconMale.png' que esta en la carpeta correspondiente del disco privado
1
2
<img src="{{ route('privateFiles.view'  ,['uriFile'=>str_replace("/","\\",$uriFile)]) }}" alt="{{$uriFile}}" ><br>
<img src="{{ route('privateFiles.view1' ,['uriFile'=>urlencode($uriFile)]) }}" alt="{{$uriFile}}" ><br>

CONTROLADOR:
1
2
3
4
5
6
7
8
9
10
public function viewFile($uriFile){
        $uriFile = str_replace("\\","/",$uriFile);
        $filepath = storage_path("app/private/" . $uriFile);
        return response()->file($filepath);
    }
    public function viewFile1($uriFile){
        $uriFile = urldecode($uriFile);  // de manera automatica???
        $filepath = storage_path("app/private/" . $uriFile);
        return response()->file($filepath);
    }


get_con_parametros_001
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

get con parametros que contienen caracteres especiales

Publicado por TCOS (2 intervenciones) el 14/02/2024 13:26:28
Bueno, pues la solución está propuesta en: https://github.com/laravel/framework/issues/22125#issuecomment-623747380

y consiste en duplicar la codificación y, como podéis ver en la imagen, ya está funcionando ....

1
2
<img src="{{ route('privateFiles.view'   ,['uriFile'=>str_replace("/","\\",$uriFile)]) }}" alt="{{$uriFile}}">
<img src="{{ route('privateFiles.view1' ,['uriFile'=>urlencode(urlencode($uriFile))]) }}" alt="{{$uriFile}}">
get_con_parametros_002

Espero que os sirva de ayuda!

TCOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar