WriteFTPFile Method
Class: FTP_SERVICE
=
Object.WriteFTPFile
Parameter
lcRemoteFile
Type Character
Direction Input
This parameter cannot be empty.
lcLocalFile
Type Character
Direction Input
This parameter cannot be empty.
liData
Type Integer
Direction Input
Return value Boolean
The return value is .T. if file is uploaded or .F. is not.



See also
Expand/Collapse source code of procedure WriteFTPFile Source Code
      LPARAMETERS lcRemoteFile, lcData,liData,liStart,liFlags
      LOCAL fResult,lihFTP,lcBuffer,liData,liWrite,lihFile,llFast,lcAll
      LOCAL ARRAY laFile(1)
      lihFile=0

      liData=IIF(PCOUNT()<3,512,liData)
      liData=IIF(liData<=0,512,liData)

      liStart=IIF(PCOUNT()<4,0,liStart)
      liFlags=IIF(PCOUNT()<5,_FTPS_RWF_File,liFlags)

      IF !BITTEST(liFlags,0) && File?
         IF ADIR(laFile,lcData,"RSHA")=0
            RETURN .F.
         ENDIF

         llFast=VAL(STRTRAN(SUBS(VERSION(),LEN("Visual FoxPro ")+1,2),"0",""))>5 AND laFile(1,2)<=_FTPS_MaxFileSize
         IF !llFast
            lihFile=FOPEN(lcData,0)
            IF lihFile<=0
               RETURN .F.
            ENDIF
            =FSEEK(lihFile,liStart,0)
         ELSE
            lcAll=FILETOSTR(lcData)
            lcAll=SUBST(lcAll,liStart+1)
         ENDIF
      ELSE
         lcData=IIF(TYPE("lcData")#"C","",lcData)
         lcData=SUBST(lcData,liStart+1)
         llFast=.T.
      ENDIF

      IF This.OpenFTPConnection(This.cStartupFolder)    && Open an FTP Handle
         lcRemoteFile = lcRemoteFile + cNULL

         =This.BeforeWriteFTPFile(lcRemoteFile, lcData,liData,liStart,liFlags)

         IF liStart<=0 && All data
            STORE FtpOpenFile(This.nConnect_Handle, @lcRemoteFile, GENERIC_WRITE, ;
                              FTP_TRANSFER_TYPE_BINARY, 0) TO fResult,lihFTP
            =This.GetExtendedError()
         ELSE
            * Append file
            fResult=IIF(This.FTPCommand("APPE "+lcRemoteFile, FTP_TRANSFER_TYPE_BINARY,0,@lihFTP),1,0)
         ENDIF

         IF fResult #0 && OK, FTP file is openned
            DO CASE
               CASE !BITTEST(liFlags,0) AND (laFile(1,2)=0 OR LEN(lcAll)=0) OR;
                     BITTEST(liFlags,0) AND LEN(lcData)=0
                    lcBuffer=""
                    liData=LEN(lcBuffer)

                    liWrite=0
                    fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                    =This.GetExtendedError()
                    =This.AtWriteFTPFile(@lcRemoteFile, @lcData,liData,liStart,liFlags,liWrite,fResult)
                    IF fResult#1
                       EXIT
                    ENDIF

               CASE llFast AND !BITTEST(liFlags,0) && File
                    lii=1

                    DO WHILE lii<LEN(lcAll)
                       lcBuffer=SUBST(lcAll,lii,liData)
                       liData=LEN(lcBuffer)

                       liWrite=0
                       fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                       =This.GetExtendedError()
                       =This.AtWriteFTPFile(@lcRemoteFile, @lcData,liData,liStart,liFlags,liWrite,fResult)
                       IF fResult#1
                          EXIT
                       ENDIF
                       lii=lii+liData
                    ENDDO

               CASE BITTEST(liFlags,0) && String
                    lii=1

                    DO WHILE lii<LEN(lcData)
                       lcBuffer=SUBST(lcData,lii,liData)
                       liData=LEN(lcBuffer)

                       liWrite=0
                       fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                       =This.GetExtendedError()
                       =This.AtWriteFTPFile(@lcRemoteFile, @lcData,liData,liStart,liFlags,liWrite,fResult)
                       IF fResult#1
                          EXIT
                       ENDIF
                       lii=lii+liData
                    ENDDO

               OTHERWISE
                    DO WHILE !FEOF(lihFile)
                       lcBuffer=FREAD(lihFile,liData)
                       liData=LEN(lcBuffer)

                       liWrite=0
                       fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                       =This.GetExtendedError()
                       =This.AtWriteFTPFile(@lcRemoteFile, @lcData,liData,liStart,liFlags,liWrite,fResult)
                       IF fResult#1
                          EXIT
                       ENDIF
                    ENDDO
                    =FCLOSE(lihFile)
            ENDCASE

            =IIF(liStart>0,This.FTPCommand("NOOP", FTP_TRANSFER_TYPE_BINARY,0,.NULL.),.T.)
            =InternetCloseHandle(lihFTP)
         ENDIF

         =This.AfterWriteFTPFile(lcRemoteFile, lcData,liData,liStart,liFlags,fResult)
         =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection())   && Close FTP Handle
         RETURN fResult = 1
      ENDIF
      RETURN .F.