200分求解!!! c# ftp 上传断开后第二次上传的问题

wangyue4 2014-06-04 11:59:42
用socket发送命令的方式往ftp上传文件。
1、直接上传可以成功。
2、假如上传到一半我把网线拔掉,上传方法会进入到异常。报“远程主机强迫关闭了一个现有的连接”
3、2中进入异常后此时我再插上网线开始第二次重新上传。
4、上传前先执行“dele 文件名”的操作,且返回提示我删除成功
5、之后再执行“STOR 文件名”的操作,此时就返回550 access denied。
6、我在电脑上打开ftp地址,发现第一次上传留下的那个文件还在(刷新了),而且手动删除也删不掉,提示access denied。
7、但是奇怪的是过了七八分钟这个文件自己就没了,(我刷新之后他就没有了)

难道是有延时么?这种上传断开连接后第二次上传应该怎么搞呢?

谢谢
...全文
457 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyboard3_ 2014-06-09
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:
虽然我不是很懂这方面的问题.. 但是我想说 c#不是有专门ftp的命名空间专门来处理ftp文件的吗? http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx 有这个东西了为嘛还要socket...
+1
yibu52 2014-06-09
  • 打赏
  • 举报
回复
我想到的办法不知道可不可取,比方说一个文件4G,你把文件分成若干数据包,每个包里面用xml里面的信息是这个包的索引大小,上次上传个包地址,本次上传包的地址,还有下次上传的地址,这样上传的时候中断续传就比较好解决
jiaoshiyao 2014-06-05
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
你在公司里什么职位 月薪多少
wangyue4 2014-06-05
  • 打赏
  • 举报
回复
引用 14 楼 jwh2004 的回复:
看来ftp服务器上的配置只给你写入的权限,没有给你修改和删除文件的权限,所以你没法删除、追加文件。估计服务器上应该是放置有一个程序,定时读取你上传的文件,所以在7、8分钟后就被那个程序自动删除了。让管理服务器的那方给你一个独立的目录和账号,开放那个目录完全的权限。
所有的权限都有,我的服务器是用iis搭的那种很普通的ftp服务器。没有任何程序。
jwh2004 2014-06-05
  • 打赏
  • 举报
回复
看来ftp服务器上的配置只给你写入的权限,没有给你修改和删除文件的权限,所以你没法删除、追加文件。估计服务器上应该是放置有一个程序,定时读取你上传的文件,所以在7、8分钟后就被那个程序自动删除了。让管理服务器的那方给你一个独立的目录和账号,开放那个目录完全的权限。
wangyue4 2014-06-05
  • 打赏
  • 举报
回复
想到解决办法了,但不完美。分享给大家。每次上传的时候上传的文件名起一个别名。等上传结束之后再把文件名改成原先的名字。这样即使出现掉线,第二次上传依然是自己的一个别名,不受服务器上第一次上传留下的那个残余文件的影响。但是第一次的这个残余文件什么时候删除是个问题。ftp服务端识别连接断开有一定的延时,在这段时间里是不能操作这个残余文件的。
wangyue4 2014-06-04
  • 打赏
  • 举报
回复
引用 2 楼 dongxinxi 的回复:
你用APPE + 文件名命令,追加文件数据看看(断点续传) http://blog.163.com/wy_msj/blog/static/134481322011830114231643/
我搞过断点续传,也是用socket发送命令。用的“SIZE 文件名”这个命令先获取上一次发送的文件大小。 但是一样也是给我返回550 access denied。 我也认为可能是服务端设置的问题。 谢谢啊
  • 打赏
  • 举报
回复
你用APPE + 文件名命令,追加文件数据看看(断点续传) http://blog.163.com/wy_msj/blog/static/134481322011830114231643/
  • 打赏
  • 举报
回复
这是FTP服务器内部的设置或者那么处理的 写文件时,没有开放文件共享,异常断开后,就变得不可独写了,只有服务器程序自己去处理
tcmakebest 2014-06-04
  • 打赏
  • 举报
回复
很明显FTP服务器不发送数据的情况下,检测不到断线,文件会被保持锁定几分钟,才导致如此的现象,可以换个FTP服务器软件
wangyue4 2014-06-04
  • 打赏
  • 举报
回复
服务端就是一个很普通的ftp站点,不是开发出来的
足球中国 2014-06-04
  • 打赏
  • 举报
回复
当然如果服务器端是你自己开发的。你可以随意处理了。
  • 打赏
  • 举报
回复
引用 6 楼 wangyue4 的回复:
我下午也用FtpWebRequest 试过了,一样的。第一次连接异常断开后需要等个七八分钟才能开始第二次上传。否则都会给我返回550.可是服务端我设置允许上载时读取文件了,还有保留部分上载。
如果你嫌FTP服务不好,那就换一个服务器程序吧。
wangyue4 2014-06-04
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[quote=引用 5 楼 diaodiaop 的回复:] 虽然我不是很懂这方面的问题.. 但是我想说 c#不是有专门ftp的命名空间专门来处理ftp文件的吗? http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx 有这个东西了为嘛还要socket...
同意。 有些人就是不会用.net。[/quote] 一样的
足球中国 2014-06-04
  • 打赏
  • 举报
回复
告诉你很明白了。access denied 。文件被别的程序占用。你这时不太可能把ftp服务停掉。 最好的方法先弄个文件名后缀,确定上传完之后,重命名。
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:
虽然我不是很懂这方面的问题.. 但是我想说 c#不是有专门ftp的命名空间专门来处理ftp文件的吗? http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx 有这个东西了为嘛还要socket...
同意。 有些人就是不会用.net。
wangyue4 2014-06-04
  • 打赏
  • 举报
回复
我下午也用FtpWebRequest 试过了,一样的。第一次连接异常断开后需要等个七八分钟才能开始第二次上传。否则都会给我返回550.可是服务端我设置允许上载时读取文件了,还有保留部分上载。
by_封爱 版主 2014-06-04
  • 打赏
  • 举报
回复
虽然我不是很懂这方面的问题.. 但是我想说 c#不是有专门ftp的命名空间专门来处理ftp文件的吗? http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx 有这个东西了为嘛还要socket...
wangyue4 2014-06-04
  • 打赏
  • 举报
回复
不要沉!!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧