12
votes

Télécharger le fichier sur le site FTP à l'aide de vb.net

J'ai ce code de travail de ce Lien , pour télécharger un fichier à Un site 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()


0 commentaires

6 Réponses :


10
votes

En regardant le MSDN Documentation Ceci carte à la Commande de magasin FTP. En regardant la définition de la commande FTP START, il écrasera les fichiers existants si l'utilisateur dispose d'autorisations.

Donc, dans ce cas, oui, le fichier serait écrasé.


0 commentaires

3
votes

de: lien

Store (Store)

START

Cette commande provoque l'acceptation du serveur FTP d'accepter les données transférées via la connexion de données et de stocker les données sous forme de fichier sur le serveur FTP. Si le fichier spécifié dans PathName existe sur le site du serveur, son contenu doit être remplacé par les données transférées. Un nouveau fichier est créé sur le serveur FTP si le fichier spécifié dans PathName n'existe pas déjà.


0 commentaires

-1
votes

Il est important de savoir que, Les fichiers ne sont que des références aux pointeurs qui pointent vers un tableau d'octets en mémoire.

Lorsqu'une opération d'écriture de fichier est invitée à écrire un fichier sur un pointeur, il ne vérifiera pas si le fichier existe; Simplement, le système de fichiers permettra au fonctionnement de continuer à moins que les octets en mémoire soient utilisés ( bien que vous puissiez forcer écraser ).

Si vous souhaitez vérifier si un fichier existe avant d'écrire le fichier utilise ma méthode getdirectory dans vb.net ici: https: // Stackoverflow.com/a/28664731/2701974


0 commentaires

-1
votes

Utilisez cette fonction pour télécharger le fichier

Sous-uploadfile publique (byval _filename en tant que chaîne, byval _uploadpath en tant que chaîne, byval _ftpuser en tant que chaîne, byval _ftpasser en tant que chaîne) P>

DIM _fileinfo comme nouveau système.IO .FileInfo (_filename) p>

' 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


0 commentaires

7
votes

Oui, le protocole FTP écrase les fichiers existants sur le téléchargement.


Notez qu'il existe de meilleurs moyens de mettre en œuvre le téléchargement.

le moyen le plus trivial pour télécharger un fichier binaire sur un serveur FTP sur un serveur FTP. Utilisation de .NET Framework utilise webclient.uploadfile : xxx

Si vous avez besoin d'un contrôle plus important, que WebClient n'offre pas (comme TLS/ssL Encryption , mode de transfert ASCII / texte, mode actif, transfert de reprise, etc.), utilisez ftpwebrequest . Un moyen facile consiste simplement à copier un filtream au flux FTP à l'aide de flux.copyto : xxx

Si vous devez surveiller une progression de téléchargement, vous devez copier Le contenu en morceaux vous-même: xxx

pour GUI Progress (WinForms ProgressBar ), voir Exemple C # à:
Comment montrer la barre de progression pour le téléchargement avec FTPWebRequest

si vous souhaitez télécharger tous les fichiers D'un dossier, voir l'exemple C # à
Télécharger le répertoire des fichiers sur FTP serveur à l'aide de WebClient .


2 commentaires

Cette réponse est pefect, une bonne addition, c'est comment créer des répertoires sur votre FTP: Stackoverflow.com/questions/9031336/...


WebClient.Downloadfile d'occasion, qui est similaire, pour télécharger un fichier à partir d'un site FTP et fonctionne également également. Upvoted, merci.



-1
votes

Ceci est le code de travail pour télécharger des fichiers sur un serveur FTP xxx


0 commentaires