【发布时间】:2022-01-22 09:00:42
【问题描述】:
我知道有很多关于这些问题的问题,但我不知道我做错了什么。
有问题的网站允许我使用浏览器上传文件,但我正在尝试实施自动化系统。我测试过了,我可以手动上传。
我正在使用 webclient UploadFile,我要么只是得到错误,要么它似乎可以工作,但目标站点上没有显示任何内容。
这是我正在使用的: 这个给我一个实现错误(501)(未实现)
'''
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential(username, password);
client.UploadFile("https://ftp.serverurl.com/Upload/TestFile.txt", WebRequestMethods.Ftp.UploadFile, @"C:\temp\testftp.txt");
}
'''
如果我在没有路径和文件名的情况下使用 https://ftp.serverurl.com/,我会得到同样的错误。
如果我将站点更改为 ftp://ftp.serverurl.com/Upload/TestFile.txt,我会超时。 (无法连接)
如果我尝试使用下面的代码,我会收到未经授权的 401。我确实验证了用户名和密码是否正确。
'''
string file = @"C:\temp\testftp.txt";
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential(username, password);
using (var postStream = client.OpenWrite(webServiceUrl, "POST"))
{
postStream.Write(postArray, 0, postArray.Length);
}
}
'''
该网站据称使用 pgp ftp。网站上的组件使用“Serv-U WebClient”,但我找不到任何有用的文档。我无法使用 filezilla 连接到它。不确定它应该使用哪个端口,但 21 不起作用。
【问题讨论】:
-
仅供参考,我整个上午都在寻找答案,但我没有弄清楚。
-
HTTP 和 FTP 是非常不同的协议。您需要从使用 FTP 客户端开始,而不是像现在那样使用 HTTP 客户端。 NuGet 上会有几个可供选择。 (从技术上讲,您可以将
WebClient用于一些有限的 FTP,但它已经过时了,对于 HTTP,您现在应该更喜欢HttpClient,而对于 FTP,请使用专用的客户端)。 -
我终于能够使用 sftp 使用 filezilla 进行连接。仍在尝试弄清楚如何使用 c# 进行连接。 @sellotape 谢谢。我没有意识到 webclient 不起作用。我会试试你的建议。
-
@sellotape 谢谢。那是我需要的信息。我现在可以上传到网站了。
-
SFTP 和 FTP 也是完全不同的协议。