我目前有这个代码作为我的FTP代码(它有魅力!)
Using ms As New System.IO.MemoryStream
test.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
Using wc As New System.Net.WebClient
wc.UploadData("ftp://" & My.Settings.username & ":" & My.Settings.password & "@ftp." & My.Settings.server & My.Settings.imagelocation & filename & ".jpg", ms.ToArray())
End Using
End Using
但是我有一个新的用户名和目录等,它们包含“@”这是我的用户名,例如:“snap@example.com”
但之前我的用户名是“测试”,你看到没有“@”我猜它,因为它与“@ ftp”部分混淆,任何建议如何解决?
答案 0 :(得分:1)
简答:
在创建网址之前,使用System.Web.HttpUtility.UrlPathEncode对您的用户名和密码进行编码。
答案很长:
根据the IETF's RFC 1738,这是一个关于网址的标准跟踪文档,它明确地说
在用户和密码字段中,必须对任何“:”,“@”或“/”进行编码。
actual URL spec document没有明确提及在用户名和密码中编码特殊字符,但我认为这意味着您可以对它们进行编码。它说
因为%符号始终表示 如果是编码字符,则可以通过编码使URL更安全 任何被认为不安全的字符,而已经编码。
所以你应该百分之百地逃脱你的网址中的任何特殊字符,如果是'@'那就是%40。
答案 1 :(得分:0)
或者,您可以使用.net提供的以下类:
的NetworkCredential
Private Shared Sub UploadFileToFTP(source As String)
Try
Dim filename As String = Path.GetFileName(source)
Dim ftpfullpath As String = ftpurl
Dim ftp As FtpWebRequest = DirectCast(FtpWebRequest.Create(ftpfullpath), FtpWebRequest)
ftp.Credentials = New NetworkCredential(ftpusername, ftppassword)
ftp.KeepAlive = True
ftp.UseBinary = True
ftp.Method = WebRequestMethods.Ftp.UploadFile
Dim fs As FileStream = File.OpenRead(source)
Dim buffer As Byte() = New Byte(fs.Length - 1) {}
fs.Read(buffer, 0, buffer.Length)
fs.Close()
Dim ftpstream As Stream = ftp.GetRequestStream()
ftpstream.Write(buffer, 0, buffer.Length)
ftpstream.Close()
Catch ex As Exception
Throw ex
End Try
End Sub