我有客户在那里运行SQL Server Express 2005,并且每个客户每个月都需要备份,并且需要将备份移动到我们的服务器以防丢失备份。我们的软件每个月都会自动备份数据库,但我们必须手动进入并复制它。有没有什么方法可以使用FTP每月自动将高达800兆的文件从他们的机器复制到我们的?此外,如果使用FTP,它必须支持简历,以防我们失去连接三个排序器经常发生。我想将此功能写入我们的VB.net应用程序,该应用程序只需要.net框架而不使用任何第三方控件。
答案 0 :(得分:2)
我认为如果您使用RSync之类的东西而不是本土解决方案,那么这就是您的最佳选择。
答案 1 :(得分:0)
无论是WebClient类还是(Ftp)WebRequest / WebResponse系列类都可以使用它 - 如果需要,我可以给你一些示例代码 - 除非你有一些特定的商业案例来推销自己像RSync这样的东西是更好的选择。
EDIT;
WebClient路由是最简单的,但它不会给你太多控制权;
Imports System.Net
...
Dim Client As New WebClient
Client.DownloadFile("ftp://ftp.example.com/Database.bak", "D:\Backups\Database.bak")
如果你想要更多控制,并管理FTP简历,那么这样的事情就可以了;
Public Sub TransferFile(ByVal SourcePath As String, ByVal DestinationPath As String)
Dim SourceRequest As FtpWebRequest
Dim Buffer(4095) As Byte
Dim BytesRead As Integer
' Assumes source is on FTP server...
SourceRequest = DirectCast(WebRequest.Create(SourcePath), FtpWebRequest)
SourceRequest.Method = WebRequestMethods.Ftp.DownloadFile
' If we already have a local file, then resume from the end of it...
SourceRequest.ContentOffset = If(File.Exists(DestinationPath), New FileInfo(DestinationPath).Length, 0)
' Assume destination file is local/UNC file. FileMode.Append will create a new file if one doesn't exist.
Using DestinationFile As New FileStream(DestinationPath, FileMode.Append, FileAccess.Write, FileShare.None)
Using SourceResponse As WebResponse = SourceRequest.GetResponse()
Using SourceStream As Stream = SourceResponse.GetResponseStream()
Do
BytesRead = SourceStream.Read(Buffer, 0, Buffer.Length)
DestinationFile.Write(Buffer, 0, BytesRead)
' Calculate speed, progress, show to user/log, etc...
Loop While BytesRead > 0
End Using
End Using
End Using
End Sub
这假设您正在从FTP转移 - >本地。用户名/密码可以像SourcePath一样提供; ftp://username:password@ftp.mysite.co.uk
希望这有帮助。
答案 2 :(得分:0)
另一种选择是使用像SyncBack这样的程序,它支持跨FTP的同步,可以安排每天/每周/每月运行,并且多年来一直帮我做你正在谈论的事情。我不确定恢复FTP传输 - 但它可以很好地通过FTP备份。