Ir al contenido


Foto

Subir un archivo vía HTTP con IDHTTP


  • Por favor identifícate para responder
5 respuestas en este tema

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 17 marzo 2010 - 01:04

Saludos, tengo una duda, comento para que me entiendan, hice una aplicación que baja y sube archivos zip y txt, esto vía FTP y todo de lujo, el problema es cuando el usuario me dice que su personal de sistemas "porque seran asi eh" le tienen bloqueados los puertos para ftp y otros, sólo tienen habilitado el puerto de Internet "80" y pues ahora quieren que la aplicación haga lo mmismo pero vía HTTP.

Con los componentes Indy, esto es fácil, bueno eso crei, para descargar no tengo problemas hago lo siguiente:



delphi
  1. ...
  2.       feFileTmp := TFileStream.Create(sFileXLStmp, fmCreate);
  3.       try
  4.         idHttpUpDown.Request.Pragma := 'no-cache';
  5.         idHttpUpDown.Request.CacheControl := 'no-cache';
  6.         idHttpUpDown.Get(sURL, feFileTmp);
  7.       finally
  8.         feFileTmp.Free;
  9.       end;
  10. ...



pero para subir "upload" segun ví esta el evento PUT, pero al ejecutarlo me manda el siguietne error

HTTP/1.1 501 Not Implemented

Alguien podría apoyarme con esto????
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 marzo 2010 - 06:56

Ensaya con esto como dice Wilson:



delphi
  1. procedure TForm1.SendPostData;
  2. var
  3. Stream: TStringStream;
  4. Params: TIdMultipartFormDataStream;
  5. begin
  6.   try
  7.     Stream := TStringStream.Create('');
  8.     try
  9.       Params := TIdMultipartFormDataStream.Create;
  10.       try
  11.         Params.AddFile('File1', 'C:\A\kk.txt','application/octet-stream');
  12.         try
  13.           HTTP.Post('http:localhost/upload.php',Params,Stream);
  14.           except
  15.           on E: Exception do
  16.           ShowMessage('Se encontró un problema al enviar el archivo: ' + E.Message);
  17.           end;
  18.             ShowMessage(Stream.DataString);
  19.       finally
  20.         Params.Free;
  21.       end;
  22.     finally
  23.       Stream.Free;
  24.     end;
  25.       except
  26.   end;
  27. end;



HTTP es un componente TIdHTTP.

Saludos.
  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 18 marzo 2010 - 03:26

Amigos, ya pude realizar el proceso, y quiero compartirlo con ustedes:



delphi
  1. function UploadFile(FileName: String): String;
  2. var
  3.   IdHTTP: TIdHTTP;
  4.   Stream: TIdMultipartFormDataStream;
  5.   Response: String;
  6. begin
  7.   Result := 'no';
  8.   IdHTTP := TIdHTTP.Create;
  9.   Stream := TIdMultipartFormDataStream.Create;
  10.   try                                   
  11.     Stream.AddFile('archivo', FileName, '');  {'image/' + Ext}
  12.     Stream.AddFormField('comp', 'ok');
  13.     Response := IdHTTP.Post('[url]http://dominio.com.mx/uploadfiles/index.php',[/url] Stream);
  14.     if Pos('Respuesta: ok', Response) > 0 then
  15.       Result := 'ok';
  16.   finally
  17.     IdHTTP.Free;
  18.     Stream.Free;
  19.   end;
  20. end;



Lo explico:

Creamos en runtime el IDHTTP que va a ser el transporte y el Stream que es donde vamos a encriptar el archivo, mediante el evento AddFile con los siguientes parametros, (Nombre del campo tipo file del formulario html, Nombre del archivo a subir, Tipo de dato a subir (si se deja en blanco puedo subir lo que sea)).
En el evento AddFormField() le vamos a pasar el nombre y la acción del input que envia el archivo, esto del formulario HTML.

y por último posteamos la pagina donde esta nuestro formulario HTML.

Este último es importante ya que lo vamos a llamar para que el haga la subida del archivo.

Espero le sirva, saludos:
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 18 marzo 2010 - 03:37

Ah que bien, una pregunta, ¿este proceso no requiere de alguna validación, como un usuario y contraseña ?

Gracias por el aporte (y)

Salud OS
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 marzo 2010 - 05:07

Pues se parece al mío :D (y)
  • 0

#6 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 marzo 2010 - 08:30

Ah que bien, una pregunta, ¿este proceso no requiere de alguna validación, como un usuario y contraseña ?

Gracias por el aporte (y)

Salud OS


No, egostar, como yo lo utilizo no necesita user ni pass

Pues se parece al mío :D (y)


Efectivamente amigo, de ahi lo tome, sólo que adaptandolo a mis necesidades y pues ya me funciono, gracias y saludos
  • 0




IP.Board spam blocked by CleanTalk.