net ejemplo conectar cliente .net vb.net ftp ftpwebrequest

ejemplo - Cargar archivo en el sitio FTP usando VB.NET



vb net download ftp (5)

Desde: Enlace

ALMACENAMIENTO (TIENDA)

STOR

Este comando hace que el servidor FTP acepte los datos transferidos a través de la conexión de datos y almacene los datos como un archivo en el servidor FTP. Si el archivo especificado en pathname existe en el sitio del servidor, entonces su contenido debe ser reemplazado por los datos que se transfieren. Se crea un nuevo archivo en el servidor FTP si el archivo especificado en pathname no existe.

Tengo este código de trabajo desde este enlace , para subir un archivo a un sitio ftp:

'' set up request... Dim clsRequest As System.Net.FtpWebRequest = _ DirectCast(System.Net.WebRequest.Create("ftp://ftp.myserver.com/test.txt"), System.Net.FtpWebRequest) clsRequest.Credentials = New System.Net.NetworkCredential("myusername", "mypassword") clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile '' read in file... Dim bFile() As Byte = System.IO.File.ReadAllBytes("C:/Temp/test.txt") '' upload file... Dim clsStream As System.IO.Stream = _ clsRequest.GetRequestStream() clsStream.Write(bFile, 0, bFile.Length) clsStream.Close() clsStream.Dispose()

Me pregunto, si el archivo ya existe en el directorio ftp, ¿se sobrescribirá el archivo?


Mirando la documentación de MSDN esto se asigna al comando FTP STOR. Al mirar la definición del comando FTP STOR sobrescribirá los archivos existentes, si el usuario tiene permisos.

Entonces, en este caso, sí, el archivo se sobrescribirá.


Use esta función para cargar archivo

Public Sub UploadFile (ByVal _FileName como cadena, ByVal _UploadPath como cadena, ByVal _FTPUser como cadena, ByVal _FTPPass como cadena)

Dim _FileInfo como nuevo System.IO.FileInfo (_FileName)

'' Create FtpWebRequest object from the Uri provided Dim _FtpWebRequest As System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(New Uri(_UploadPath)), System.Net.FtpWebRequest) '' Provide the WebPermission Credintials _FtpWebRequest.Credentials = New System.Net.NetworkCredential(_FTPUser, _FTPPass) '' By default KeepAlive is true, where the control connection is not closed '' after a command is executed. _FtpWebRequest.KeepAlive = False '' set timeout for 20 seconds _FtpWebRequest.Timeout = 20000 '' Specify the command to be executed. _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile '' Specify the data transfer type. _FtpWebRequest.UseBinary = True '' Notify the server about the size of the uploaded file _FtpWebRequest.ContentLength = _FileInfo.Length '' The buffer size is set to 2kb Dim buffLength As Integer = 2048 Dim buff(buffLength - 1) As Byte '' Opens a file stream (System.IO.FileStream) to read the file to be uploaded Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead() Try '' Stream to which the file to be upload is written Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream() '' Read from the file stream 2kb at a time Dim contentLen As Integer = _FileStream.Read(buff, 0, buffLength) '' Till Stream content ends Do While contentLen <> 0 '' Write Content from the file stream to the FTP Upload Stream _Stream.Write(buff, 0, contentLen) contentLen = _FileStream.Read(buff, 0, buffLength) Loop '' Close the file stream and the Request Stream _Stream.Close() _Stream.Dispose() _FileStream.Close() _FileStream.Dispose() Catch ex As Exception MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try

End Sub

CÓMO UTILIZAR:

''Cargar archivo usando FTP UploadFile ("c: / UploadFile.doc", " ftp: //FTPHostName/UploadPath/UploadFile.doc ", "UserName", "Password")


Es importante saber que los archivos son solo referencias a punteros que apuntan a una matriz de bytes en la memoria.

Cuando se le pide a una operación de escritura de archivos que escriba un archivo en un puntero, no verifica si el archivo existe; Simplemente, el sistema de archivos permitirá que la operación continúe a menos que se estén utilizando los bytes en la memoria ( aunque puede forzar la sobreescritura ).

Si desea verificar si existe un archivo antes de escribir el archivo, use mi método GetDirectory en VB.net aquí: https://.com/a/28664731/2701974


Sí, el protocolo FTP sobrescribe los archivos existentes en la carga.

Tenga en cuenta que hay mejores formas de implementar la carga.

La forma más trivial de cargar un archivo binario en un servidor FTP utilizando .NET Framework es usar WebClient.UploadFile :

Dim client As WebClient = New WebClient client.Credentials = New NetworkCredential("username", "password") client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", "C:/local/path/file.zip")

Si necesita un mayor control, que el WebClient no ofrece (como el cifrado TLS / SSL, etc.), use FtpWebRequest . La forma más fácil es simplemente copiar una secuencia de FileStream a FTP usando Stream.CopyTo :

Dim request As FtpWebRequest = WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip") request.Credentials = New NetworkCredential("username", "password") request.Method = WebRequestMethods.Ftp.UploadFile Using fileStream As Stream = File.OpenRead("C:/local/path/file.zip"), ftpStream As Stream = request.GetRequestStream() fileStream.CopyTo(ftpStream) End Using

Si necesita monitorear un progreso de carga, debe copiar los contenidos por partes usted mismo:

Dim request As FtpWebRequest = WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip") request.Credentials = New NetworkCredential("username", "password") request.Method = WebRequestMethods.Ftp.UploadFile Using fileStream As Stream = File.OpenRead("C:/local/path/file.zip"), ftpStream As Stream = request.GetRequestStream() Dim read As Integer Do Dim buffer() As Byte = New Byte(10240) {} read = fileStream.Read(buffer, 0, buffer.Length) If read > 0 Then ftpStream.Write(buffer, 0, read) Console.WriteLine("Uploaded {0} bytes", fileStream.Position) End If Loop While read > 0 End Using

Para el progreso de la GUI (WinForms ProgressBar ), vea el ejemplo de C # en:
¿Cómo podemos mostrar la barra de progreso para cargar con FtpWebRequest?

Si desea cargar todos los archivos de una carpeta, vea el ejemplo de C # en
Subir el directorio de archivos usando WebClient .