Tema: Cliente FTP
Ver Mensaje Individual
  #9  
Antiguo 03-03-2019
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Reputación: 17
jhonalone Va por buen camino
Hola a todos.

Como es mi costumbre cuando resuelvo algo, os dejo la solución que a mí me ha funcionado.

Mi operador telefónico en casa y en el móvil es Orange. (No sé si el problema sucede con otros operadores)

Como os comentaba, cuando uso el móvil con el Wi-Fi de casa no hay ningún problema, los ficheros se suben por FTP a mi Web sin problemas.

El problema surgió al intentar hacer lo mismo desconectando el móvil de la Wi-Fi. Y utilizar los datos móviles del dispositivo,

He llegado a la conclusión de que el servidor que usa el operador es el que da el problema. Pues con ficheros realmente pequeños no da problemas. Cuando digo pequeños es de 1000 bytes o poco más.

Yo estaba intentando subir un fichero de 17600 bytes (Que a mí me parece pequeño...)

Al final he optado por el lema de Julio César: "Divide y vencerás" y así ha sido.

Dejo un fragmento de código por si sirve a alguien.

Código Delphi [-]
........................................
type
  TForm1 = class(TForm)
    .....
    Memo1: TMemo;
    ......

........................................
var

filename, FileTemp, FileUsed : String;
idFTP1 : TidFTP;
FS, FS2, FSInter: TMemoryStream;

................................................

        FS.Clear;
         Memo1.Lines.SaveToStream(FS); //Para grabar nuevamente en internet
      
         Sleep(300);
         FS.Position := 0;
         // Tenemos que subir el fichero poco a poco porque cuando
         // usamos los datos móviles en el dispositivo no sube el fichero
         // de una vez. PARECE QUE CON WIFI SI QUE LO SUBE
         I := FS.Size - FS.Position;
         if I > 1000 then I := 1000;

         FSInter.Clear;
         FSInter.CopyFrom(FS,I); // Si I > FS.Size - FS.Position lee
         FSInter.Position := 0;  // fuera de FS.Size y daria error
         IdFTP1.Put(FSInter, FileName, False, 0);

         while FS.Position < FS.Size
         do begin
            I := FS.Size - FS.Position;
            if I > 1000 then I := 1000;

            FSInter.Clear;
            FSInter.CopyFrom(FS,I); // Si I > FS.Size - FS.Position lee
            FSInter.Position := 0;  // fuera de FS.Size y daria error
            IdFTP1.Put(FSInter, FileName, True, 0);
            end;

Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita