Ir al contenido


Foto

Problema al subir archivo a FTP


15 respuestas en este tema

#1 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 05 marzo 2009 - 04:39

Que tal. estoy utilizando las indy 10.2.5 con delphi 2009

el codigo que utilizo es basicamente este



delphi
  1.     FTP := TIdFTP.Create(nil);
  2.     with FTP do
  3.     try
  4.         Host := FHost;
  5.         Username := FUserName;
  6.         Password := FPassword;
  7.         Port := 21;
  8.         try
  9.             Connect;
  10.             case Modo of
  11.               Subir: begin
  12.                   FTP.ChangeDir(FDirectorio);
  13.                   Put(FArchivo,'',True);
  14.                   Inc(FTPCountUP);
  15.               end;
  16.               Bajar: begin
  17.                   FTP.ChangeDir(FDirectorio);
  18.                   Get(FArchivo,FDirectorioDestino+FArchivoDestino,True,False);
  19.                   Inc(FTPCountDOWN);
  20.               end;
  21.             end;
  22.         except
  23.         end;
  24.       finally
  25.           if FTP.Connected then
  26.             FTP.Disconnect;
  27.           FTP.Free;
  28.       end;



El archivo que estoy subiendo es un archivo zip, termina de subir pero no sube completo, por consiguiente al bajarlo no me deja abrirlo.
que puede ser que este pasando que no lo sube todo?

Gracias por su tiempo.
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 marzo 2009 - 09:33

Hola

Seguramente te servirá este código de nuestro amigo seoane

http://delphi.jmrds.com/?q=node/6

Salud OS
  • 0

#3 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 05 marzo 2009 - 02:33

Gracias por el codigo ego lo modifique asi pero igual este sube menos jaja el archivo original tiene 10mb este codigo sube 3mb con mi codigo anterior esta subiendo 11mb.



delphi
  1. function TFTPThread.Upload : Boolean;
  2. var
  3.   hNet: HINTERNET;
  4.   hCon: HINTERNET;
  5.   hFile: HINTERNET;
  6.   Context: DWORD;
  7.   Mem: TMemoryStream;
  8.   Escritos: Cardinal;
  9. begin
  10.   Result := FALSE;
  11.   Context:= 0;
  12.   hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  13.   if (hNet <> nil) then
  14.   begin
  15.     hCon:= InternetConnect(hNet,PChar(Host),21,PChar(Username),PChar(Password),
  16.       INTERNET_SERVICE_FTP,0,Context);
  17.     if (hCon <> nil) then
  18.     begin
  19.       hFile:= FtpOpenFileW(hCon,PChar('KP2.1.0.23.UPD'),GENERIC_WRITE,
  20.         FTP_TRANSFER_TYPE_BINARY,Context);
  21.       if (hFile <> nil) then
  22.       begin
  23.         Mem:= TMemoryStream.Create;
  24.         Mem.LoadFromFile(Archivo);
  25.         try
  26.           try
  27.             if InternetWriteFile(hFile,Mem.Memory,Mem.Size,Escritos) then
  28.               Result:= Mem.Size = Escritos
  29.             else
  30.               Result:= FALSE;
  31.           except end;
  32.         finally
  33.           Mem.Free;
  34.         end;
  35.         InternetCloseHandle(hFile);
  36.       end;
  37.       InternetCloseHandle(hCon);
  38.     end;
  39.     InternetCloseHandle(hNet);
  40.   end;
  41. end;


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 marzo 2009 - 03:23

Hola

Si solo quieres hacer una aplicación FTP y no complicarte la vida puedes hacer uso de los componente AsyncPro, son libres y tienen ejemplos de FTP.

Puedes bajar un DEMO que compile para probar.

Salud OS

Archivos adjuntos

  • Archivo adjunto  351_.zip   347,88KB   6 descargas

  • 0

#5 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 05 marzo 2009 - 03:48

gracias voy a probarlos, queria utilizar los indy para no estar instalando mas componentes pero igual si esa es la solucion "bienvenida"

Muchas gracias.
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 05 marzo 2009 - 04:19

¿Has comprobado si el problema lo tiene el servidor? Porque me parece raro que falle wininet, son las mismas librerí­as que usa IExplorer, y aunque no sea una maravilla no creo que falle de manera tan estrepitosa. Además tengo un código similar funcionando en varios clientes y me va de maravilla  :^)

Prueba a mandar el archivo en pedazos mas pequeños, algunos servidores tienen la costumbre de cerrar la conexión si no hay actividad en el socket de control (el que se conecta por el puerto 21) y mientras se mandan archivos muy grandes esta conexión permanece inactiva.
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 05 marzo 2009 - 06:28

el codigo de seoane yo tambien lo utilizo y no tiene ningun problema, asi que los tiros deben ir por otro lado
  • 0

#8 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 06 marzo 2009 - 02:11

Gracias por sus comentarios,el problema era el tipo de transferencia, le asigne esta propiedad a binaria y listo.



delphi
  1. TransferType := ftBinary;



segun la ayuda de las indy ese es el valor predeterminado pero igual lo asigne y listo. ya pude subir mis archivos. dejo el link de las ayuda de las indy

http://www.indyproje...ean.html<br />

Ahora con el codigo de Seoane talvez el nos ayuda un poco para predeterminar el tipo de dato a transferir.









  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 06 marzo 2009 - 07:18

Ahora con el codigo de Seoane talvez el nos ayuda un poco para predeterminar el tipo de dato a transferir.


Ejem ...


delphi
  1. FTP_TRANSFER_TYPE_BINARY



  • 0

#10 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 06 marzo 2009 - 12:59

Gracias Seoane, voy a probarlo asi tambien.

Saludos.

Me puse a revisar las fuentes de los Indy y encontre esta linea



delphi
  1. Id_TIdFTP_TransferType = {ftBinary} ftASCII; // RLebeau 1/22/08: per RFC 959


segun la ayuda el valor predeterminado es binary pero ya veo que lo cambio este chatio RLebeau
  • 0

#11 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 09 marzo 2010 - 04:34

Un año después, que joder, estoy probando el mismo codigo en D2010 y nada que sube los archivos completos pero al bajarlos (completos) están corruptos. La unica diferencia es que la version de las Indy es la 10.5.5 la que trae por default el D2010
  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 marzo 2010 - 04:39

wow, ¿un año y aún sin resolver? :s, pos eso hay que cambiarlo.
  • 0

#13 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 09 marzo 2010 - 04:46

wow, ¿un año y aún sin resolver? :s, pos eso hay que cambiarlo.


Nop hace un año lo resolvi con D2009, ahora estoy probando D2010 para ver si migro y me da el mismo problema con el codigo que si funciona en D2009
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 04:47

Tal vez persista el problema del tipo de transferencia, porque no miras por ese lado.

Salud OS
  • 0

#15 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 10 marzo 2010 - 12:30

precisamente eso era otravez, problema del tipo a transferir, ahora tuve que modificar las fuentes del idFTP.pas



delphi
  1. Id_TIdFTP_TransferType = {ftBinary} ftASCII; // RLebeau 1/22/08: per RFC 959



por



delphi
  1. Id_TIdFTP_TransferType = ftBinary {ftASCII}; // RLebeau 1/22/08: per RFC 959


  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 10 marzo 2010 - 12:38

Ah vaya que bien. Me alegra que haya sido algo no muy complejo. (y)

Salud OS
  • 0



Responder en este tema



  


IP.Board spam blocked by CleanTalk.