Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-11-2018
jrojasmcfia jrojasmcfia is offline
Miembro
 
Registrado: feb 2018
Posts: 18
Poder: 0
jrojasmcfia Va por buen camino
Envio de Foto a API PHP

Hola estoy tratando en mi aplicacion Android enviar varios datos a un sitio php para que escriba en una base de datos, para los campos texto ya lo logre sin embargo no he podido pasar una imagen, entendo que esta al pasarse como parametro debe ser un string para lo cual transforme la imagen en un String de la siguiente manera

Código Delphi [-]
stream.LoadFromFile(ruta);
SS:=TStringStream.Create('');
S.CopyFrom(Stream, 0);
y luego indico en un servicio rest lo siguiente
restclient1.BaseURL := 'http://www.mipagina.com/Imagenes/icosecha.php?fecha=' + efecha + '&cantidad=' + FloatToStr(spinbox1.value) + '&imagen=' + SS.DataString;

el URL lo llama bien, sin embargo no se como convertir desde la pagina php el string que le envie de la imagen para que me lo guarde en un campo blob de la base de datos. Alguien que haya tenido el mismo inconveniente

Última edición por Casimiro Notevi fecha: 06-11-2018 a las 09:39:04.
Responder Con Cita
  #2  
Antiguo 06-11-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Podrías codificar en Base64 la imagen que quieres enviar, puesto que, ya en PHP, no tendrás problemas en utilizar dicha cadena Base64, guardarla en un archivo, y, a continuación, en una base de datos. Sin embargo, una petición HTTP GET, es decir, usar la URL para enviar una cadena en Base64, puede ser algo problemático, cuando no imposible, debido a los límites que se puedan imponer a los argumentos que pueden enviarse y hasta recibirse usando la URL en una petición HTTP GET.

Lo anterior quiere decir que tal vez deberías usar HTTP POST, y, haciéndolo así, intentar averiguar si puedes ir más allá y enviar, mediante HTTP POST, directamente, el archivo, no su representación en Base64. PHP no tiene problemas en recibir archivos "tal cual", a los que podrás acceder usando la variable "$_FILES" de PHP. Para hacer esto habría que ver si el componente "REST" que usas permite enviar archivos de este modo, pero, en principio, debería poder, o bien podrías sustituirlo por un "IdHttp", que, permite enviar archivos, directamente, sin pasar por Base64.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-11-2018
jrojasmcfia jrojasmcfia is offline
Miembro
 
Registrado: feb 2018
Posts: 18
Poder: 0
jrojasmcfia Va por buen camino
Ok, gracias Dec, si he visto algunos post donde usan idhttp, sin embargo me queda la duda de como hago para que el mismo insert que utilizo en la página php para ingresar los otros parámetros (como cantidad y fecha) que ya tengo, reciba e ingrese también la imágen usando el método idhttp.
Responder Con Cita
  #4  
Antiguo 06-11-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

En principio, no es complicado, es decir, se trata de usar las variables "super globales" de PHP: $_GET, $_POST y $_FILES. Una llamada HTTP POST puede incluir datos de entrada que se encontrarán en la variable $_POST, y, también archivos, que se encontrarán en la variable $_FILES. Piensa en un formulario HTML... que permite enviar varios campos, además de archivos, en una sola llamada HTTP POST.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 07-11-2018
jrojasmcfia jrojasmcfia is offline
Miembro
 
Registrado: feb 2018
Posts: 18
Poder: 0
jrojasmcfia Va por buen camino
Hola Dec, he estado investigado lo que indicas y generè el siguiente código de un post que me encontre en el clubdelphi, sin embargo el URL donde requiero enviar es https, para lo cual utilizo el componente TIdSSLIOHandlerSocketOPenSSL,como lo indico en el código, pero a la hora de correrlo en mi movil me da error "Could not load SSL library", tienes alguna idea.

Código Delphi [-]
procedure TForm3.enviohttp;
var
  https: TIdHttp;
  params: TStrings;
  respuesta: string;
  idssl: TIdSSLIOHandlerSocketOPenSSL;
begin

   https := TIdHTTP.Create(Self);
   idssl := TIdSSLIOHandlerSocketOpenSSl.Create(nil);
   params := TStringList.Create;
  try
    HTTPs.ReadTimeout := 30000;
    IdSSL.SSLOptions.Mode := sslmClient;
    IdSSL.SSLOptions.Method := sslvSSLv23;
    HTTPs.IOHandler :=idssl;

    //IdSSL.SSLOptions.Mode := sslmUnassigned;
    params.Add('variable1=valor1');
    params.Add('variable2=valor2');
    respuesta := https.Post('https://www.mipagina.com/Imagenes/pruebas-post.php', params);
    ShowMessage('Respuesta: ' + respuesta);
  finally
    https.Free;
    params.Free;
  end;
end;

Última edición por Casimiro Notevi fecha: 07-11-2018 a las 21:04:43.
Responder Con Cita
  #6  
Antiguo 07-11-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No olvides usar las etiquetas cuando pongas código.

Responder Con Cita
  #7  
Antiguo 13-11-2018
jrojasmcfia jrojasmcfia is offline
Miembro
 
Registrado: feb 2018
Posts: 18
Poder: 0
jrojasmcfia Va por buen camino
Hola Dec, gracias por los aportes, pero no logro leer el archivo desde la pagina de PHP.
Ya lo logre enviar desde delphi mediante el siguiente codigo, pero no logro desde php escribir el archivo en el cambo blob de la BD, podrias indicarme si algo no va bien?


Código Delphi [-]
  data :=TIdMultiPartFormDataStream.Create();
   try
    data.AddFormField('fecha',efecha);
    data.AddFormField('cantidad',valor);
    data.AddFile('archivo', ruta,'image');
    http.Post('http://www.mipagina.com/Imagenes/icosecha.php',data);
   finally
    data.Free;
   end;

Pero en PHP lo hago de la siguiete manera y cuando escribo la variable en la BD MySql, no escribe nada

Código PHP:


 $fecha 
$_POST['fecha'];
 
$cantidad $_POST['cantidad'];
 
$imagen_temporal $_FILES['archivo']['tmp_name'];
 
$tipo $_FILES['archivo']['type'];
 
$fp fopen($imagen_temporal'r+b');
 
$data fread($fpfilesize($imagen_temporal));
 
fclose($fp);

$query    "INSERT INTO ps_cosecha (Fecha, Cantidad, Imagen,TipoImagen, nregistro) 
             VALUES('
$fecha', '$cantidad', '$Imagen','$tipo',  '$rvalor')"
Responder Con Cita
  #8  
Antiguo 13-11-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Cita:
Empezado por jrojasmcfia Ver Mensaje
Hola Dec, gracias por los aportes, pero no logro leer el archivo desde la pagina de PHP.
Ya lo logre enviar desde delphi mediante el siguiente codigo, pero no logro desde php escribir el archivo en el cambo blob de la BD, podrias indicarme si algo no va bien?


Código Delphi [-]
  data :=TIdMultiPartFormDataStream.Create();
   try
    data.AddFormField('fecha',efecha);
    data.AddFormField('cantidad',valor);
    data.AddFile('archivo', ruta,'image');
    http.Post('http://www.mipagina.com/Imagenes/icosecha.php',data);
   finally
    data.Free;
   end;

Pero en PHP lo hago de la siguiete manera y cuando escribo la variable en la BD MySql, no escribe nada

Código PHP:


 $fecha 
$_POST['fecha'];
 
$cantidad $_POST['cantidad'];
 
$imagen_temporal $_FILES['archivo']['tmp_name'];
 
$tipo $_FILES['archivo']['type'];
 
$fp fopen($imagen_temporal'r+b');
 
$data fread($fpfilesize($imagen_temporal));
 
fclose($fp);

$query    "INSERT INTO ps_cosecha (Fecha, Cantidad, Imagen,TipoImagen, nregistro) 
             VALUES('
$fecha', '$cantidad', '$Imagen','$tipo',  '$rvalor')"
Yo empezaría por ver si las variables de entrada ($_POST, $_FILES) contienen los datos que se esperan. En todo caso, me aseguraría también de que PHP está configurado para informar de cualquier posible error que pudiera darse.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 14-11-2018
jrojasmcfia jrojasmcfia is offline
Miembro
 
Registrado: feb 2018
Posts: 18
Poder: 0
jrojasmcfia Va por buen camino
Hola

Gracias Dec, revise las variables y use el siguiente código, este si me funciono para hacer el Insert y efectivamente el archivo llega a la BD, que luego se puede desplegar.

Código PHP:

$fecha 
$_POST['fecha'];
$cantidad $_POST['cantidad'];
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));
$binario_tipo=$_FILES['archivo']['type'];

$query    "INSERT INTO ps_cosecha (Fecha, Cantidad, Imagen,TipoImagen, nregistro) 
             VALUES('
$fecha', '$cantidad', '$binario_contenido','$binario_tipo',  '$rvalor')"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardar Foto DamianG FireMonkey 4 25-03-2018 16:42:24
Tu foto yusnerqui La Taberna 767 22-03-2012 06:05:21
poner foto en el centro de otra foto kapullok_2006 Gráficos 1 22-10-2007 18:52:10
architect dvd 3.0 entre foto y foto tulajvs Gráficos 2 06-11-2006 11:11:02
entre foto y foto, architect dvd 3.0 tulajvs Varios 2 05-09-2006 16:03:48


La franja horaria es GMT +2. Ahora son las 07:30:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi