Загрузить файл на FTP-сайт с помощью VB.NET
У меня есть этот рабочий код из этого ссылке, чтобы загрузить файл на 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:Temptest.txt")
' upload file...
Dim clsStream As System.IO.Stream = _
clsRequest.GetRequestStream()
clsStream.Write(bFile, 0, bFile.Length)
clsStream.Close()
clsStream.Dispose()
интересно, если файл уже существует в каталоге ftp, файл будет перезаписан?
6 ответов
смотреть на!--1-->MSDN документация это сопоставляется с командой FTP STOR. Глядя на определение команды FTP STOR, он перезапишет существующие файлы, если у пользователя есть разрешения.
в этом случае, да, файл будет перезаписан.
From:ссылке
СТОР (МАГАЗИН)
стор
эта команда заставляет FTP-сервер принимать данные, передаваемые через подключение к данным, и хранить данные в виде файла на FTP-сервере. Если файл, указанный в pathname, существует на сайте сервера, его содержимое должно быть заменено передаваемыми данными. Новый файл создается на FTP-сервере, если файл, указанный в pathname, еще не существует.
да, протокол FTP перезаписывает существующие файлы при загрузке.
обратите внимание, что есть лучшие способы для осуществления загрузки.
самый тривиальный способ загрузки двоичного файла на FTP-сервер с помощью .NET framework-это использование 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")
Если вам нужен больший контроль, что WebClient
не предлагает (например, шифрование TLS/SSL и т. д.), Используйте FtpWebRequest
. Простой способ-просто скопировать FileStream
к потоку FTP используя 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
Если вам нужно следить за ходом загрузки, вы должны скопировать содержимое кусками самостоятельно:
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
для прогресса GUI (WinForms ProgressBar
), см. Пример C# по адресу:
как мы можем показать индикатор выполнения для загрузки с помощью FtpWebRequest
если вы хотите загрузить все файлы из папки, см. Пример C# в
загрузить каталог файлов с помощью WebClient.
это важно знать, Файлы-ссылки на указатели, которые указывают на массив байтов в памяти.
когда операцию записи файла просят записать файл в указатель, он не будет проверять, существует ли файл; просто файловая система позволит продолжить операцию, если не используются байты в памяти (хотя вы можете принудительно перезаписать).
Если вы хотите проверить, существует ли файл перед записью использования файла мой метод GetDirectory в VB.net вот:https://stackoverflow.com/a/28664731/2701974
используйте эту функцию для загрузки файла
Общественные Суб Протоколу(_FileName Бывал, Как Струна, Бывал _UploadPath Как Строку, _FTPUser Бывал, Как Струна, _FTPPass Бывал Как Строку)
Dim _FileInfo Как Новая Система.ИО.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
КАК ИСПОЛЬЗОВАТЬ:
' Загрузить файл с помощью FTP UploadFile("c:\UploadFile - ... doc","ftp://FTPHostName/UploadPath/UploadFile.док!--13-->", "Имя Пользователя", "Пароль")
это код для загрузки файлов на FTP-сервер
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(New Uri("ftp://" & server & "/" & folderName & "/" & filename)), System.Net.FtpWebRequest)
request.Method = WebRequestMethods.Ftp.UploadFile
request.Credentials = New NetworkCredential(username, password)
request.UseBinary = True
request.UsePassive = True
Dim buffer(1023) As Byte
Dim bytesIn As Long = 1
Dim totalBytesIn As Long = 0
Dim filepath As System.IO.FileInfo = New System.IO.FileInfo(file)
Dim ftpstream As System.IO.FileStream = filepath.OpenRead()
Dim flLength As Long = ftpstream.Length
Dim reqfile As System.IO.Stream = request.GetRequestStream()
Do Until bytesIn < 1
bytesIn = ftpstream.Read(buffer, 0, 1024)
If bytesIn > 0 Then
reqfile.Write(buffer, 0, bytesIn)
totalBytesIn += bytesIn
End If
Loop
reqfile.Close()
ftpstream.Close()