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


声明:本文转载自https://my.oschina.net/dingdayu/blog/1544048,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

问题描述

应公司运营的要求,需要写一个基于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

本文发表于2017年09月27日 14:35
(c)注:本文转载自https://my.oschina.net/dingdayu/blog/1544048,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2706 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1