Spanish PostMultipart y https

msucho

Member
Licensed User
Longtime User
Buenos dias :
En B4a alguno de vosotros pudo subir un archivo usando a un servidor en https con php usando postmultipart .
A mi me funcionan perfecto con http pero con https la variable $_FILES del php desaparece en https.
Si alguno tiene un ejemplo u otra forma de subir un archivo me podria ayudar?
Muchas Gracias
Saludos
Marcelo
 

msucho

Member
Licensed User
Longtime User

GeoT

Active Member
Licensed User
Para subir un archivo mediante POST multipart, B4A (Basic4Android) y HTTPS a AWS, puedes seguir estos pasos:
1. Preparación del Archivo en B4A:
- Utiliza B4A para seleccionar el archivo que deseas subir.
- Divide el archivo en partes más pequeñas si es necesario.
2. Configuración de la Solicitud HTTP en B4A:
- Utiliza la librería HttpUtils2 para realizar la solicitud HTTP.
- Configura la solicitud como multipart, especificando los límites adecuados.
3. Envío de la Solicitud a AWS S3:
- Utiliza la URL de endpoint de AWS S3 para la carga.
- Incluye las credenciales de seguridad necesarias en la solicitud.
4. Manejo de Respuestas y Errores:
- Gestiona las respuestas y errores que provengan de AWS S3.
- Asegúrate de manejar de manera adecuada los códigos de respuesta HTTP.

Para el apartado 3:
  1. URL de Endpoint de AWS S3:
    • La URL de endpoint de AWS S3 varía según la región en la que hayas creado tu bucket. Por ejemplo, si estás en la región de EE. UU. Este (Norte de Virginia), el endpoint sería https://s3.amazonaws.com/nombre-de-tu-bucket. Asegúrate de reemplazar "nombre-de-tu-bucket" con el nombre real de tu bucket. Puedes encontrar la lista completa de endpoints en la documentación de AWS S3.
  2. Credenciales de Seguridad:
    • Para realizar una solicitud a AWS S3 desde una aplicación móvil, necesitarás las siguientes credenciales de seguridad:
      • Access Key ID: Un identificador único asociado a tu cuenta de AWS.
      • Secret Access Key: Una clave secreta que autentica tu solicitud. Mantén esta clave de manera segura y no la compartas públicamente.
  3. Inclusión de Credenciales en la Solicitud HTTP:
    • Incluye las credenciales en la cabecera de la solicitud HTTP. Puedes utilizar el método de autenticación AWS Signature V4.
    • Ejemplo de cabecera en B4A:
      Authorization: AWS4-HMAC-SHA256 Credential=AccessKeyID/20240121/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      Asegúrate de generar la firma adecuada utilizando las credenciales y detalles específicos de tu solicitud.
Recuerda que es crucial proteger las credenciales y seguir las prácticas de seguridad recomendadas para las aplicaciones móviles al interactuar con servicios en la nube.
 

msucho

Member
Licensed User
Longtime User
Hola msucho.
También puedes utilizar una aplicación o extensión de navegador para testear APIs y así ver qué falla. Como Postman.
Luego, introduce en el buscador de Internet palabras clave como "postman como subir archivo post multipart" y te aparecerán enlaces a páginas web o vídeos explicativos.
Vídeos como Probar upload en POSTMAN y configurando el tamaño máximo.
Hoa GeoT, ante todo muchas gracias por las respuestas.
Te cuento que mi problema es basicamente que el post/multipart de B4A en http funciona perfecto , el problema se genera en https sobre la misma direccion aunque el archivo sea pequeño. Por otro lado si diseño una pagina con php para hacer subir archivos en https funciona perfectamente.
Me extraña que en todo el foro de B4A no he encontrado un solo ejemplo (si he buscado bien) de un post/multipart sobre https.
De nuevo muchas gracias por responder.
Saludos
 

GeoT

Active Member
Licensed User
Hola msucho.
¿Qué quieres decir con "Por otro lado si diseño una página con php para hacer subir archivos en https funciona perfectamente."?
¿Ajustaste bien la configuración de seguridad en el servidor para permitir el tráfico HTTPS?
¿Te funciona al menos tu certificado para navegar a tu página?
Saludos.
 

msucho

Member
Licensed User
Longtime User
Quiero decir que al realizar una pagina web que permite subir el mismo archivo usando el mismo php del lado servidor el archivo sube perfectamente.
El certificado de seguridad es correcto, y funciona sin problemas en todos los navegadores (chrome, firefox,edge).
Gracias
Saludos
 

GeoT

Active Member
Licensed User
Hola msucho.
Entiendo.

Entonces prueba a añadir
B4X:
Dim mp As MultipartFileData
...
mp.ContentType = "image/png"    'o el tipo que sea
o bien cambia a
B4X:
mp.KeyName = "file[]"      'con los corchetes
a ver qué pasa.
 
Last edited:

msucho

Member
Licensed User
Longtime User
Bueno, finalmente localice y resolvi el problema.
Utilizando el comando curl desde linux se me dio la misma falla. Usando el mismo curl debugue la conexion y encontre que cuando apuntaba a la direccion https://xxxx.com me redirecciona a la direccion https://www.xxx.com (estimo que asi esta el apache configurado). Esto no pasa con http://xxxx.com.
A la redireccion se pierden todas las variables desde el lado cliente y por ello el php encontraba todo vacio.
Solucion sencilla, poner la url con https://www.xxx.com.
Definitivamente siempre tuvo que funcionar si hubiese hallado esto antes.
Muchisimas gracias a todos los por intentar ayudarme.
Saludos
Marcelo
 

GeoT

Active Member
Licensed User
Bien, msucho.
Me alegro de que hayas encontrado la causa y la solución.
Sí, la opción más probalable era algo de la configuración al lado del servidor.

Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
Para conocimiento general:
Busqueda para mas informacion
 
Top