C# FTP 坑了我两天的一个坑

问题描述

应公司运营的要求,需要写一个基于FTP的文件上传工具(win下),遂决定,基于C# 及 winform 写一个窗体小程序;经过了一周的深夜打码,终于初具雏形,最初在公司FTP的服务器上测试,前前后后踩了数十个坑:进度条问题,超大文件问题,中文文件名问题,UI线程问题,多线程问题。。。。

窗体截图

这些个坑也就罢,眼看工期将至,总算看到希望,就在昨日,进入联调阶段,开始连接集团FTP服务器,并进行后端逻辑联调,程序改为FTP服务器后,麻烦来了,先是由于手误的认证问题,后是文件路径等问题。。。。

输入图片说明

其中,远程服务器返回错误: (500) 语法错误,无法识别命令。 问题把我坑的要死要死的。昨天调试到深夜三点多,依然没有任何解决方案,今天到公司后继续排查,打各种断点,查各个变量及类成员,各种异常通过Google,baidu,msdn,github,stackoverflow去搜相关问题,都没有找到真正能解决的问题。。。。

输入图片说明

有说编码的问题,有说长链接的问题,有说路径的问题,有说被动主动的问题,有说权限问题……

真是坑的......

问题解决

在昨天百度了几十篇网页,今天谷歌了几十篇网页的情况下,终于转运,在一个调试中找到问题的答案。(吐槽下百度,搜索出来相似的网页太多,而且那些文章明显的采集来的。。。)

最后断点中分析到返回的状态为:CommandSyntaxError,在 FtpStatusCode 枚举 中查到:指定该命令有语法错误或不是被服务器识别的命令。

以此,谷歌搜索,几十篇文章中,终于找到相似的问题:

输入图片说明

在二楼,楼主给出了他的答案:

输入图片说明

是因为在请求的时候给ContentLength属性附了值,在从项目开始的近两周的时间里,FTP类,先后修改数十次,每行都仔细筛查,很多文章中都调用了这个属性,在内网测试中也都没发现,所以一直没注意掉这个问题。

关键词

出现“webReq.ContentType”引发了“System.NotSupportedException”类型的异常
“webReq.PreAuthenticate”引发了“System.NotSupportedException”类型的异常
“webReq.UseDefaultCredentials”引发了“System.NotSupportedException”类型的异常

“res.ContentType”引发了“System.NotSupportedException”类型的异常
“res.PreAuthenticate”引发了“System.NotSupportedException”类型的异常
“res.UseDefaultCredentials”引发了“System.NotSupportedException”类型的异常

搞了这么久,终于知道为什么了。这三个异常存在是正常的。我的程序需要使用ContentLength属性,因为是直接从http的改过来的,FTP的不能直接使用ContentLength属性,需要将Method改为WebRequestMethods.Ftp.GetFileSize,才能使用ContentLength属性。原因是在客户端中FtpWebRequest是忽略ContentLength这个属性的。

链接

http://bbs.csdn.net/topics/380034923

https://msdn.microsoft.com/zh-cn/library/system.net.ftpstatuscode(v=vs.110).aspx

转载于:https://my.oschina.net/dingdayu/blog/1544048

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值