Subir archivo a un HTTP

Subir archivo a un HTTP

Postby TOTOVIOTTI » Sat Mar 21, 2015 12:11 pm

Amigos,
he estado viendo y probando como descargar un archivo desde HTTP y funciona
perfecto.
La consulta ahora es:
se podrá hacer algo como URLDownLoad, que en vez de bajar, permita subir
un archivo al lugar que le indiquemos?
Desde ya, muchas gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir archivo a un HTTP

Postby FiveWiDi » Sun Mar 22, 2015 8:30 am

Yo uso estas funciones, mírateleas con carño. Deberás setetar tus propia variables.

Code: Select all  Expand view
/*----------------------------------------------------------------------------------------*/
* Basado en el siguiente trabajo:                                                         *
* ===============================                                                         *
/*----------------------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------------------*/
*                                                                                         *
*        Archivo: Proc9991.PRG                                                            *
*    Descripcion: Subir ficheros del servidor FTP                                         *
*          Fecha: 11-03-2012                                                              *
*          Autor: Jose Javier LLoris Roig                                                 *
*            Web: http://javierlloris.blogspot.com.es/                                    *
*            Msn: fwh-jll@hotmail.es                                                      *
*                                                                                         *
*       Libreria: FWH/FWHX 11.09                                                          *
*        Harbour: Harbour 5.8.2 release 20120330                                          *
*     Compilador: Borland C++ 5.8.2                                                       *
*            S.O: XP/Win7 no probado en otros S.O                                         *
*                                                                                         *
*    Copyright (C) 2012 José Javier Lloris Roig                                           *
*    Correo electrónico: fwh-jll@hotmail.es                                               *
*    Web: http://javierlloris.blogspot.com.es/                                            *
*                                                                                         *
*    Este programa es software libre: usted puede redistribuirlo y/o modificarlo bajo los *
*    términos de la Licencia Pública General GNU publicada por la Fundación para el       *
*    Software Libre, ya sea la versión 3 de la Licencia, o (a su elección) cualquier      *
*    versión posterior.                                                                   *
*                                                                                         *
*    Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA      *
*    ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD PARA UN PROPÓSITO   *
*    DETERMINADO.                                                                         *
*                                                                                         *
*    Consulte los detalles de la Licencia Pública General GNU para obtener una información*
*    más detallada.                                                                       *
*                                                                                         *
*    Debería haber recibido una copia de la Licencia Pública General GNU                  *
*    junto a este programa. En caso contrario, consulte http://www.gnu.org/licenses.      *
/*----------------------------------------------------------------------------------------*/

#Include "FiveWin.CH"

STATIC oFTP
STATIC lFTP := .F.
STATIC aFiles
STATIC nSizeFiles

FUNCTION Traza()
Return Nil

/*------------------------------------------------------------------------------*/
FUNCTION oGetoFTP()
Return oFTP
/*------------------------------------------------------------------------------*/
FUNCTION lIsOpenFTP()
Return lFTP
/*------------------------------------------------------------------------------*/
Function CierraFTP()
Traza( 1, "CierraFTP()" )

If lIsOpenFTP()
    oFTP:Close()
EndIf

DeleteObject( oFTP )
oFTP := NIL
lFTP := .F.

Return Nil
/*------------------------------------------------------------------------------*/
Function lConectaFTP( AMPAARRA )
/*------------------------------------------------------------------------------*/
Local lOk   := .F.

Local cPasswordFTP := RTrim( AMPAarra[2][3][1][19] ) + Space(25)


// comprobamos si tenemos conexion a internet
IF !IsInternet()
    MsgAlert( "Compruebe la conexión a Internet.", "Atención" )
    Return (lFTP := .F.)
END
   
aFiles     := {}
nSizeFiles := 0

/* Comprobamos que en la BD Ftp.DBF estan los datos introducidos para poder */
/* acceder al servidor FTP                                                  */
IF EMPTY( AMPAarra[2][3][1][17] ) .OR.; // Nombre del servidor FTP
   EMPTY( AMPAarra[2][3][1][18] ) .OR.; // Nombre del usuario FTP
   EMPTY( AMPAarra[2][3][1][19] ) .OR.; // Password del usuario del FTP
   EMPTY( AMPAarra[2][3][1][20] )       // Nombre de la carpeta destino en el servidor FTP

    MsgAlert( "Debe de configurar el programa para poder"      +CRLF+;
              "acceder al servidor FTP. Entre en el apartado"  +CRLF+;
              "Configurar programa y introduzca la información"+CRLF+;
              "requerida y vuelva a intentarlo."               +CRLF+CRLF+;
              "Pulse el boton de aceptar para continuar.", "ERROR!!" )
    Return (lFTP := .F.)

END

MsgGet( GetTrad("Atenció!"), RTrim( AMPAarra[2][3][1][17] ) + "-" + RTrim( AMPAarra[2][3][1][18] ) + "-" + GetTrad("Indiqui el Password:"), @cPasswordFTP )
   
Traza( 1, "RTrim( AMPAarra[2][3][1][17] )=", RTrim( AMPAarra[2][3][1][17] ) )
Traza( 1, "RTrim( AMPAarra[2][3][1][18] )=", RTrim( AMPAarra[2][3][1][18] ) )
Traza( 1, "cPasswordFTP=", cPasswordFTP )
Traza( 1, "AMPAarra[2][3][1][20]=", AMPAarra[2][3][1][20] )
Traza( 1, "AMPAarra[2][3][1][21]=", AMPAarra[2][3][1][21] )
Traza( 1, "AMPAarra[2][3][1][22]=", AMPAarra[2][3][1][22] )
Traza( 1, "AMPAarra[2][3][1][23]=", AMPAarra[2][3][1][23] )
   
MsgRun( "Conectando con el servidor FTP",;
        "Espere por Favor..."           ,;
        { || oFtp := ServicesFTP():New( RTrim( AMPAarra[2][3][1][17] ) ,; // Servidor
                                        RTrim( AMPAarra[2][3][1][18] ) ,; // Usuario
                                        AllTrim(cPasswordFTP)         , ;    // RTrim( AMPAarra[2][3][1][19] ) ,; // Contraseña
                                        AMPAarra[2][3][1][21]          ,; // Permitir anonimos
                                        AMPAarra[2][3][1][22]          ,; // Tiempo de respuesta
                                        AMPAarra[2][3][1][23]         )}) // Puerto
SysRefresh()

IF (lOk := (oFtp:nError == 0))
    Traza( 1, "a-oFtp:GetPath()=", oFtp:GetPath() )

    /* Aqueta funció és molt important per que a més a més de carregar
       fitxers en la array 'aFiles', es situa en el directori de FPT.
       ------------------------------------------------------------ */

    CargaFiles( RTrim( AMPAarra[2][3][1][20] ) )

    Traza( 1, "Connectat!!!" )
    Traza( 1, "b-oFtp:GetPath()=", oFtp:GetPath() )
END

Traza( 1, "oFtp:nError:", oFtp:nError ) 
Traza( 1, "lOk=", lOk )

Return ( lFTP := lOk )
/*------------------------------------------------------------------------------*/
Function SubeFichero( AMPAARRA, cFile, lMensaje )
/*------------------------------------------------------------------------------*/

/* Esta función puede usarse sola (directamente), con lo cual en ella se
   realiza la conexión a FTP, o precedida del uso de lConectaFTP() y poscedida de
   CierraFTP(), y en ese caso no se realizará la conexión a FTP en esta función ya que
   se habrá realizado previamente en lConectaFTP().
   Para controlar esta situación se usa la variable lConectadoFTPenSubefichero .
   -------------------------------------------------------------------------------- */

Local lConectadoFTPenSubefichero := .F.

LOCAL cFilePut  := ""
LOCAL cDirBack  := ""
LOCAL lSubido   := .F.

Traza( 1, "lFTP=", lFTP)
Traza( 1, "cFile=", cFile )
Traza( 1, "ValType(oFTP)=", ValType(oFTP) )

//If .Not. lFTP
If .Not. lIsOpenFTP()
    If .Not. lConectaFTP( AMPAARRA )
        Return .F.
    EndIf
    lConectadoFTPenSubefichero := .T.
EndIf

cDirBack := oFtp:GetPath()

oFtp:oFtp:Cwd( oFtp:GetPath() )

Traza( 1, "oFtp:oFtp:Cwd( oFtp:GetPath() )" )

IF !Empty( cFile )

    /* Buscamos si ya existe el fichero en el servidor ftp */
    IF AScan( aFiles, { | aFile | Lower( aFile[1] ) == Lower( cFileNoPath( cFile ) ) } ) > 0

        IF MsgNoYes( "Archivo: " + Lower( cFileNoPath( cFile ) ) + CRLF + CRLF + ;
                     "El fichero ya existe en su sitio FTP." + CRLF + CRLF + ;
                     "¿ Desea reemplazarlo ? ", "Seleccione..." )

            /* Borramos el fichero */
            IF !oFtp:oFtp:Dele( RTrim( cFileNoPath( cFile ) ) )

                MsgAlert( "Archivo: " + RTrim( Lower( cFileNoPath( cFile ) ) ) + CRLF + CRLF + ;
                          "No se ha podido eliminar el archivo." + CRLF + CRLF + ;
                          "Pulse el boton Aceptar para continuar.", "ERROR!!" )
                If lConectadoFTPenSubefichero
                    Traza( 1, "No es pot esborrar." )
                    CierraFTP()
                Endif
                Return( lSubido )
            END
          ELSE
            If lConectadoFTPenSubefichero
                Traza( 1, "No es còpia i es tanca." )
                CierraFTP()
            Endif
            Return( lSubido )
        END
    END
END

MsgRun( "Subiendo el archivo: " + Lower( RTrim( cFileNoPath( cFile ) ) )             ,;
        "Servidor Ftp: " + RTrim( AMPAarra[2][3][1][17]) + " Usuario: " + RTrim( AMPAarra[2][3][1][18] ),;
        { || cFilePut := oFtp:oFtp:MPut( cFile, oFtp:GetPath() )})

SysRefresh()

Traza( 1, "cFilePut=", cFilePut)

IF Empty( cFilePut )

    lSubido  := .F.

    If lMensaje
        MsgAlert( "Archivo: " + Lower( cFileNoPath( cFile ) )                + CRLF + CRLF + ;
                  "El archivo no se ha podido subir a su sitio FTP. Consulte"+ CRLF + ;
                  "con su administrador de sistemas o ISP los permisos"      + CRLF + ;
                  "de escritura de su sitio FTP."                            + CRLF + CRLF + ;
                  "Pulse el boton Aceptar para continuar.", "ERROR!!" )

    EndIf
   
  ELSE

    lSubido  := .T.

    If lMensaje
        MsgInfo( "Ruta de acceso remoto predeterminado: " + oFtp:GetPath() + CRLF + ;
                 "Archivo: " + Lower( cFileNoPath( cFile ) )               + CRLF + CRLF + ;
                 "El archivo se ha subido correctamente a su sitio FTP."   + CRLF + CRLF + ;
                 "Pulse el boton Aceptar para continuar." )
    EndIf
END

If lConectadoFTPenSubefichero
    Traza( 1, "Al final" )
    CierraFTP()
Endif

If lsubido
  Else
    Inkey(1)
EndIf

Return( lSubido )
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/
STATIC Function CargaFiles( cPath )
/*------------------------------------------------------------------------------*/

   DEFAULT cPath := "/"

   aFiles     := oFtp:ScrollDir( If( cPath == "/", "/", ( RTrim( cPath ) + "/" ) ) )
   nSizeFiles := oFtp:nSizeFiles

Return NIL
 
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1060
Joined: Mon Oct 10, 2005 2:38 pm

Re: Subir archivo a un HTTP

Postby TOTOVIOTTI » Sun Mar 22, 2015 11:44 am

Carlos
gracias por responder, ésta funcion que envías es para subir y bajar a una FTP.
Eso no tengo problemas porque ya lo tengo desarrollado, el tema es poder grabar
un archivo en la carpeta PUBLIC de una http.
Usas esta misma función para eso?
Saludos
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir archivo a un HTTP

Postby russimicro » Sun Mar 22, 2015 12:48 pm

Ver tema...

protocolo http... seguridad... restricciones
russimicro
 
Posts: 225
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: Subir archivo a un HTTP

Postby Carlos Mora » Mon Mar 23, 2015 12:22 pm

Roberto,

TOTOVIOTTI wrote:... el tema es poder grabar un archivo en la carpeta PUBLIC de una http.


Ampliando un poco lo que menciona Russimicro: Por cuestiones de seguridad lo que pedís es un poco ruleta rusa. Imaginate, por ejemplo, que subo un archivo malaleche.php. Despues me voy al navegador y pongo http://tuwebmcom.ar/malaleche.php y lo podría ejecutar con los permisos del servidor web, que frecuentemente suelen ser de administrador o parecido.

He visto que algo de PHP usas, hay mucho ya escrito en ese lenguaje para subir cosas, como recomendación te diría que las carpetas con archivos para carga y descarga tienen que estar FUERA del PUBLIC, sino alguien mal intencionado podría subir y ejecutar código, y por otro lado sería bueno que haya un control para subir y bajar archivos, que no sea cualquiera el que pone y saca.

Esto que te digo es solo a nivel protocolo y organización. Tambien deberías estudiar la posibilidad de usar https o sftp si la información que se transmite esta sujeta a la protección de datos.

Fuera de tema. Viendo tu firma veo que sos de San Francisco!
Hace ya más de 10 años viví en Córdoba Capital, y tuve algunos clientes por tus pagos. ¡Que ciudad linda San Francisco!

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Subir archivo a un HTTP

Postby TOTOVIOTTI » Wed Mar 25, 2015 1:05 pm

Hola Carlos!
No sabías que conocías por éstos lares! Que bueno!
Amigo, entiendo la peligrosidad, me habían comentado, tengo un problema con unos servicios
de internet, que me bloquean la descarga de las actualizaciones de mi sistema, desde la ftp,
por lo que, pensé que de esa manera, podría solucionarlo.
Como bajar desde la URL funciona correcto, pensé que por el tráfico que tiene mi página,
nadie se iba a poner a infectarme, lo tendré en cuenta!
Muchas gracias y me alegro que hayas estado por acá!
Linda nuestra provincia, Córdoba!
Abrazo.
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir archivo a un HTTP

Postby Carlos Mora » Wed Mar 25, 2015 3:05 pm

Toto,

Respecto del tema de la seguridad, es algo que hasta que no te pasa uno no se da cuenta. En la oficina tenemos varias aplicaciones web, tenemos 4 ips fijas, y varios servidores LAMP y algún windows. Es _increíble_ la cantidad de ataques diarios que se sufren, sin ningún motivo particular, solo buscándote alguna vulnerabilidad, y de los lugares más extraños del mundo. Hemos traceado IPs de EEUU, Rusia, China, Corea, Iran, Brasil, etc. y ves que solo te están buscando por donde entrarte. Al final, y como una medida precautoria, se configuraron los firewalls de forma tal que solo se responden peticiones de dentro del pais, y los segmentos IP conocidos de algunos clientes que usan proxies y que sabemos de donde vienen.

Respecto de actualizaciones de EXEs, es complicado cuando no es uno el que controla los servicios. Lo mejor es zipear+encriptar+renombrar, y hacerte tu propio instalador. En el blog de Biel creo que había un post donde explicaba como armar un actualizador muy lindo, seguro podrás sacar ideas.

Algo que te puede resultar interesante es contratar una VPS en lugar de solo hosting, una maquina virtual chica te sale un par de dolares al mes pero vos haces y deshaces como mejor te da la gana, y no dependés de los criterios particulares de un administrador que tiene que lidiar con miles de dominios a la vez.

Ya sabés, para lo que haga falta.

Abrazo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Subir archivo a un HTTP

Postby MarioG » Tue Mar 31, 2015 6:56 pm

Gente:
No se si estaré m... fuera del tarro. Pero leyendo el post de Carlos, entro en "panico".
Tengo un espacio web de un servidor free. Alli subo las actualizaciones de precios (dbfs) que se bajan de un par de sucursales. Esto entra dentro de la facil vulnerabilidad? (no uso la carpeta public, sino una creada al efecto).
En cuanto a las app, considero que es muy lindo y creo que da un aspecto muy profesional el que las actualizaciones se hagan via web.
Pero habiendo hoy tantos espacio gratuito enla nube: Google Drive, Dropbox, OneDrive... etc. etc. No resulta mas sencillo y seguro usar esos lugares?
(mas allá de que sobre gustos no hay nada escrito :) )
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 82 guests