Para subir un archivo usando el protocolo FTP desde una aplicación ASP.NET 2, utiliza la clase FtpWebRequest
.
No olvides importar System.IO
y System.Net
al inicio de tu código:
- Imports System.Net
- Imports System.IO
Este es el código para subir el archivo:
- 'Subir Archivo por FTP
- ' Configurar el Request
- Dim ElRequest As FtpWebRequest = DirectCast(WebRequest.Create("ftp://servidorejemplo.com/folder1/archivo.zip"), FtpWebRequest)
- ElRequest.Credentials = New NetworkCredential("usuario", "password")
- ElRequest.Method = WebRequestMethods.Ftp.UploadFile
- ' Leer archivo
- Dim BufferArchivo() As Byte = File.ReadAllBytes("D:Inetpubwwwrootarchivo.zip")
- ' Subir archivo
- Dim ElStream As System.IO.Stream = ElRequest.GetRequestStream()
- ElStream.Write(BufferArchivo, 0, BufferArchivo.Length)
- ElStream.Close()
- ElStream.Dispose()
Solamente tienes que utilizar tus datos reales para la ruta del ftp, ruta local, nombre de usuario y contraseña.
Nota:
Si te sale este error:
Unable to cast object of type 'System.Net.FileWebRequest' to type 'System.Net.FtpWebRequest'
Quiere decir que estás haciendo algo similar a esto:
DirectCast(WebRequest.Create("c:\folder1\archivo.zip")
Escribe la ruta usando ftp://
en vez de c:
y se solucionará el error antes mencionado.
Si el fichero es superior a 1611653 bytes dara un error inesperado.
Hola, quisiera saber como lo puedo hacer en VS2003???
He llegado a tu web por Google porque explicas exactamente lo que busco!!
Hago exactamente lo que dices pero me da un error: tecopio codigo y error, a ver si me ayudas…
(donde las xxx son las que uso para subir via ftp archivos, p.e via VWD…)
EL ERROR QUE ME DA**************
SI ME PUEDIERAIS AYUDAR SUUUUPERAGRADECIDO!!!
Saludos, Javier.-
PEEEEEEEEEEEEERDOOOOOOOOOOOOOOOON
Ese error me da pk puse las xxx y claro, imposible conectar….
el error es este:
O no existe el archivo:
D:Documents and SettingsJaviEscritoriocursogratuito.aspx
O en tu FTP no existe la ruta:
ftp://ftp.miscursosgratuitos.com/pruebas/
De cualquier forma, si me dices cuál es la línea 47 en tu archivo listarftp.aspx.vb nos ayudarías mucho a ver qué pasa.
Por el error que marca, me late que es tu FTP, checa que el usuario que estás usando tiene como directorio predeterminado el raíz, porque estás especificando /pruebas.
Si el usuario, al conectarse, es redirigido a pruebas entonces el directorio que estás especificando no va a funcionar.
Si todo falla, prueba con otro ftp, me late que por ahí está tu problemita.
QUEEEEEEE VELOCIDAD!!!!
Muchas gracias por la ayuda, se agradece…
Vamos a ver si me puedes ayudar…
** el archivo a subir existe
** user y pass estan tambien bien (los uso para subir con el VWD)
** quizas sea en la web donde este el problema…
La web tiene una direccion que he creado que es
http://www.miscursosgratuitos.com/pruebas/cursogratuito.aspx
Entiendo que le puedo meter a la carpaeta pruebas lo que quiera… y por eso le quiero enchufar el archivo txt que le paso al hacer el load…
mi linea 47 es:
y es ahi donde me da el error…
Bueeeeno, algo parece que ha cambiado….
con este codigo
AHORA DA OTRO ERROR:
EL DIRECTORIO RAIZ DEL FTP ES HTTPDOCS, POR ESO EL CAMBIO…
CAMBIE TAMBIEN EL ARCHIVO A SUBIR POR UN HTML, POR SI ESO INFLUIA EN ALGO…
AGRADEZCO MUCHIIIIISIMO TU AYUDA!!!!
Intenta subir un zip sólo por si las dudas. O un jpg. Intenta en un ftp windows sí tienes acceso a uno.
La Clase que estas usando viene con asp.net y es muy limitada.
Sí todo falla busca en google por un componente de ftp para asp net.
Yo he usado http://rebex.net y me ha salido muy bueno porque además te deja hacer otras cosas como crear subdirectorios etc.
Claro que vas a tener que desembolsar un dinero pero prueba el trial oye busca alguno más.
Sí piensas que no gas a requerir mayor funcionalidad que subir archivos al mismo directorio entonces tratale un rato más a tu código.
Nos cuentas como te va.
Gracias por tu respuesta
AL FINAL SAN GOOGLE HIZO EL MILAGRO: busque un poco y encontre algo que me funciono… te paso el codigo para que le eches un ojo y por si lo quieres usar (esta en c# y no lo entiendo muy bien, pero me funciona…
PRIMERO LA CLESE Y LUEGO SE INVOCA AL LOAD LA PAGE
Perfecto Javier, que bueno que lo solucionaste.
Gracias por compartir la solución, quizás a alguien le sirva.
realmente se agradece lo voy a probar
=)
Hola,
muy bueno el Script, pero tengo un problema. Lo tengo dentro de un for que me sube varios archivos de distintos tamaños y cuando llega a un archivo de unos 6 mg no puede con el y da un error en el comando (imagino q en el write)
Alguien ha logrado subir archivos de gran capacidad mediante algun script????
Es muy necesario para poder mecanizar el proceso.
Muchas Gracias de antemano
Hola susana, revisa un post que puse más arriba sobre Rebex. Intenta con ese. Claro, va a costar, pero depende de tu proyecto quizás valga la pena.
Yo puse Rebex porque lo use en un proyecto y no tuve ningún problema, pero pon en Google “ASP.NET FTP Component” y seguramente te salen varias opciones.
Saludos.
Hola Pablo,
Gracias por tu respuesta pero no me vale, intentaba solo quitarme trabajo, ya que en mi empresa no pagaran por algo así. Buscaré alguna otra forma de automatizar la subida diaria de archivos que no sea abriendo el ftp manualmente y subiendo, jeje. De todas forma si alguien ha encontrado algo QUE NO DUDE EN CONTARLO
Gracias y saludos
Supongo que algo que podrías intentar es conseguirte un FTP de línea de comando, una búsqueda rápida en google me llevó a http://www.coreftp.com/.
Bueno, entonces si puedes enviar comandos de FTP desde una ventanita de MS-DOS, y te funciona bien, ya lo resolviste, porque puedes crear un archivo .bat y calendarizarlo con el calendarizador de tareas de windows. Digamos, que se corra una vez al día y envíe los comandos FTP que requieres.
No sé bien cuál es exáctamente tu problema, pero quizás esa idea te ayude.
Suerte!
Gracias Pablo, pero te cuento.
Estoy intentando generar un paquete ssis (vs2005) para recoger unas tablas diariamente y subirlas a un ftp. El caso es q este programa tiene una herramienta (tarea ftp) por la cual no puedo hacerlo. Al final decidí derivarlo a una secuencia de comandos en vb.net. pero, con el código primero consigo subir ficheros hasta que llega a uno grande, y a partir de ahí falla la tarea.
Como tu bien pones lo que tendre que hacer al final sera un bat para subirlo pero todo era por ejecutar un trabajo completo desde el sql server 2005.
Gracias y saludos desde España
como puedo crear una carpeta via ftp??