Hola, soy Elfo!
Ahora les comparto este código el cuál utilizo para descargar archivos o directorios completos por ftp..
En la página para principiantes de facebook he estado compartiendo este y otros códigos
Le faltan detalles.. espero alguien aquí le pueda servir y/o pueda ayudarme a mejorarlo
En la función interactivo() acepta comandos como
dir --> muestra listado directorio local actual
cd --> cambia directorio local
.. --> regresa al directorio padre remoto
<numero> --> en el listado remoto slecciona el numero para acceder al directorio
d <numero> --> descarga el archivo o directorio enumerado al directorio local actual
q --> termina interactivo
import os # clsFTP, copia(), clsUAC
# import sys # clsUAC
# import ctypes # clsUAC
# import shutil # copia()
# from distutils.dir_util import copy_tree # copia()
from ftplib import FTP # clsFTP
class clsFTP():
def __init__(self):
self.DirLocal = os.getcwd()
self.Servidor = ""
self.Usuario = ""
self.Password = ""
self.DirRemoto = ""
self.bolConectado = False
def conecta(self, strServidor, strUsuario, strPassword):
try:
self.Servidor = strServidor
self.strUsuario = strUsuario
self.Password = strPassword
self.ftp = FTP(strServidor,strUsuario,strPassword)
self.DirRemoto = self.ftp.pwd()
self.bolConectado = True
print(self.ftp.getwelcome())
except Exception as err:
self.bolConectado = False
print("ERROR DE CONEXION")
print(err)
def desconecta(self):
self.ftp.quit()
self.bolConectado = False
def dirLocal(self, strDirLocal):
if not os.path.isdir(strDirLocal):
os.makedirs(strDirLocal, exist_ok=True)
os.chdir(strDirLocal)
def descarga(self, ruta, filename):
print("DESCARGAR ", ruta + "/" + filename, " a ", os.getcwd())
try:
with open(filename, "wb") as fp:
self.ftp.retrbinary("RETR " + ruta + "/" + filename, fp.write)
# print(self.ftp.size(filename))
# print(os.path.getsize(filename))
except Exception as e:
print("Error " + str(e))
try:
self.ftp.cwd(ruta + "/" + filename)
fp.close()
os.remove(filename)
os.mkdir(filename)
os.chdir(filename)
listaD = self.ftp.nlst()
for i in range(len(listaD)):
self.descarga(self.ftp.pwd(), listaD[i])
self.ftp.cwd("..")
os.chdir("..")
except Exception as e:
print("Error Download" + str(e))
def interactivo(self):
while 1:
self.listarRemoto()
self.DirRemoto = self.ftp.pwd()
self.DirLocal = os.getcwd()
print("\nFTP by UCLA")
print("Servidor:",self.Servidor)
print("Directorio Local:",self.DirLocal)
print("Directorio Remoto:",self.DirRemoto)
#print("\n")
strOpcion = input("Opción (H ayuda): ")
if strOpcion.lower() == "q":
break
self.evaluaOpcion(strOpcion)
def evaluaOpcion(self, strOpcion):
strOpcion = strOpcion.lower().strip()
dicOpciones = {"ll" : "self.listarLocal()", "lr" : "self.listarRemoto()",
"cr" : "self.cdRemoto()",
"h" : "self.Ayuda()"
}
if strOpcion[0] == "d":
if strOpcion[0:3] == "dir":
self.listarLocal()
else:
intOpcion = int(strOpcion.replace("d",""))
self.descarga(self.ftp.pwd(), self.lstDirectorio[intOpcion][1])
if strOpcion[0:2] == "..":
self.ftp.cwd("..")
if strOpcion.isdigit():
intOpcion = int(strOpcion)
try:
self.ftp.cwd(self.lstDirectorio[intOpcion][1])
except Exception as e:
print("Error al cambiar directorio remoto: " + str(e))
if strOpcion[0:2] == "cd":
try:
os.chdir(strOpcion[3:])
except Exception as e:
print("error al cambiar directorio local " + str(e))
if strOpcion in dicOpciones.keys():
eval(dicOpciones[strOpcion])
def Ayuda(self):
print("\nUn poco de AYUDA:")
print("""
<numero> - Cambia Directorio Remoto
D <numero> - Descarga Archivo/Directorio Remoto
CD <Directorio> - Cambia Directorio Local
DIR - Listar Directorio Local Actual.
Q - Termina Interactivo\n
""")
def listarLocal(self):
for elemento in os.listdir():
if os.path.isdir(elemento):
print("\t<DIR>", elemento)
else:
print("\t", elemento)
def listarRemoto(self):
if self.bolConectado:
self.lstDir = []
self.lstDirectorio = []
self.lstnlst = self.ftp.nlst()
self.ftp.dir(self.ftp.pwd(), self.lstDir.append)
for i in range(len(self.lstDir)):
try:
intSize = self.ftp.size(self.lstnlst[i])
strType = "F"
except:
intSize = 0
strType = "D"
self.lstDirectorio.append([self.lstDir[i], self.lstnlst[i], strType, intSize])
print(i,self.lstDirectorio[i][0])
def cdRemoto(self):
pass
Todavía no sé como insertar la imagen :(
Mientras un ejemplo:
objftp = clsFTP()
objftp.conecta("ftp.rediris.es", "anonymous", "guest")
objftp.interactivo()
Hola @darkucla (https://underc0de.org/foro/index.php?action=profile;u=97891), me encanta que dejes códigos "al aire", así muchas personas pueden aprender.
Primero que nada, colocalo en Github, me gustaria ayudarte y Segundo, sigue leyendo para que veas cómo subir una imagen usando 'Imgurl'.
Primer paso:
Ingresa a imgur.com/upload?beta
Segundo paso:
Sube o arrastra una foto
(https://imgur.com/Jc7CZBj.png)
Tercer paso:
Una vez se haya subido, mueve el puntero (sin presionar) hacia la imagen que deseas subir y luego en el boton que te aparecera, dale click izquierdo (En caso de que no hayas configurado los botones del mouse para zurdos)
(https://imgur.com/W32S4B6.png)
Cuarto paso:
Copia el link de la imagen, si no te aparece la extensión colocasela y luego usa la etiqueta BBCODE de Underc0de para incrustar la imagen en un post
(https://imgur.com/tGtFsiJ.png)
(https://imgur.com/kHRRHv6.png)
Quinto y último paso:
Inserta la dirección y listo.
~ DtxdF
@DtxdF (https://underc0de.org/foro/index.php?action=profile;u=71723)
Gracias por tu ayuda... espero haber entendido
tengo la aplicación ksnip....
(https://i.imgur.com/qftJMbf.png)
este sería el código en github
https://github.com/LuisUrbalejo/ucla.py (https://github.com/LuisUrbalejo/ucla.py)
saludos
@darkucla (https://underc0de.org/foro/index.php?action=profile;u=97891)
Excelente, cuando tenga un poco de tiempo colaboro con tu código :D
~ DtxdF