Acá un código, prueba.
-------------------------------------------------------------------------------------------
**
** COMO SUBIR UN ARCHIVO A UNA PÁGINA WEB CON VFP.
**
#DEFINE GENERIC_WRITE 1073741824 && &H40000000
PUBLIC HOPEN, HFTPSESSION
DECLARE INTEGER INTERNETOPEN IN WININET.DLL;
STRING SAGENT,;
INTEGER LACCESSTYPE,;
STRING SPROXYNAME,;
STRING SPROXYBYPASS,;
STRING LFLAGS
DECLARE INTEGER INTERNETCLOSEHANDLE IN WININET.DLL;
INTEGER HINET
DECLARE INTEGER INTERNETCONNECT IN WININET.DLL;
INTEGER HINTERNETSESSION,;
STRING SSERVERNAME,;
INTEGER NSERVERPORT,;
STRING SUSERNAME,;
STRING SPASSWORD,;
INTEGER LSERVICE,;
INTEGER LFLAGS,;
INTEGER LCONTEXT
DECLARE INTEGER FTPOPENFILE IN WININET.DLL;
INTEGER HFTPSESSION,;
STRING SFILENAME,;
INTEGER LACCESS,;
INTEGER LFLAGS,;
INTEGER LCONTEXT
DECLARE INTEGER INTERNETWRITEFILE IN WININET.DLL;
INTEGER HFILE,;
STRING @ SBUFFER,;
INTEGER LNUMBYTESTOWRITE,;
INTEGER @ DWNUMBEROFBYTESWRITTEN
** SELECCIONAMOS EL SERVIDOR FTP, CON UN NIVEL DE ACCESO APROPIADO.
** NO USAR UN ACCESO ANÓNIMO.
IF CONNECT2FTP ("FPT.???.???", "USUARIO", "PASSWORD")
LCSOURCEPATH = "C:\TEMP" && DIRECTORIO LOCAL
LCTARGETPATH = "ARCHIVOS/" && DIRECTORIO DE FTP DESTINO
LNFILES = ADIR (ARR, LCSOURCEPATH + "*.HTM")
FOR LNCNT=1 TO LNFILES
LCSOURCE = LCSOURCEPATH + LOWER (ARR [LNCNT, 1])
LCTARGET = LCTARGETPATH + LOWER (ARR [LNCNT, 1])
? LCSOURCE + " -> " + LCTARGET
?? LOCAL2FTP (HFTPSESSION, LCSOURCE, LCTARGET)
ENDFOR
= INTERNETCLOSEHANDLE (HFTPSESSION)
= INTERNETCLOSEHANDLE (HOPEN)
ENDIF
**--------------------------------------------
** ESTABLECEMOS LA CONEXIÓN
**--------------------------------------------
FUNCTION CONNECT2FTP (STRHOST, STRUSER, STRPWD)
** ABRIMOS EL ACCESO.
HOPEN = INTERNETOPEN ("VFP", 1, 0, 0, 0)
IF HOPEN = 0
? "NO TIENE ACCESO A WININET.DLL"
RETURN .F.
ENDIF
** CONECTANDO AL FTP.
HFTPSESSION = INTERNETCONNECT (HOPEN, STRHOST, 0, STRUSER, STRPWD, 1, 0,
0)
IF HFTPSESSION = 0
** CERRANDO ACCESO Y SALIENDO.
= INTERNETCLOSEHANDLE (HOPEN)
? "FTP " + STRHOST + " NO ESTÁ DISPONIBLE"
RETURN .F.
ELSE
? "CONECTADO A " + STRHOST + " COMO: [" + STRUSER + ", *****]"
ENDIF
RETURN .T.
**--------------------------------------------
** COPIA DEL/LOS ARCHIVOS
**--------------------------------------------
FUNCTION LOCAL2FTP (HCONNECT, LCSOURCE, LCTARGET)
** COPIANDO EL ARCHIVO LOCAL AL DIRECTORIO REMOTO FTP.
HSOURCE = FOPEN (LCSOURCE)
IF (HSOURCE = -1)
RETURN -1
ENDIF
** CREAMOS EL NUEVO ARCHIVO
HTARGET = FTPOPENFILE(HCONNECT, LCTARGET, GENERIC_WRITE, 2, 0)
IF HTARGET = 0
= FCLOSE (HSOURCE)
RETURN -2
ENDIF
LNBYTESWRITTEN = 0
LNCHUNKSIZE = 256 && 128, 512
DO WHILE NOT FEOF(HSOURCE)
LCBUFFER = FREAD (HSOURCE, LNCHUNKSIZE)
LNLENGTH = LEN(LCBUFFER)
IF LNLENGTH > 0
IF INTERNETWRITEFILE (HTARGET, @LCBUFFER, LNLENGTH, @LNLENGTH) =
1
LNBYTESWRITTEN = LNBYTESWRITTEN + LNLENGTH
** PODEMOS MOSTRAR AQUÍ EL PROGRESO DE LA OPERACIÓN
ELSE
EXIT
ENDIF
ELSE
EXIT
ENDIF
ENDDO
= INTERNETCLOSEHANDLE (HTARGET)
= FCLOSE (HSOURCE)
RETURN LNBYTESWRITTEN
------------------------------------------------------------
Mis saludos antes que nada.