大神帮我分析下是什么原因(关于FTP上传报错)

liaoyunt07 2017-02-16 06:19:40
本地生成后上传在FTP一直正常,年后不知道怎么的报错,(2种异常两个文件同一是时间,分别上传),如下:
一.
异常详情:错误信息:System.IO.IOException: 无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
在 System.Net.FtpDataStream.Write(Byte[] buffer, Int32 offset, Int32 size)
在 HH.SZYD.QCP.Presentation.Utils.FtpUtil.Upload(String ftpPath, String fullFileName, String fileName) 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Utils\FtpUtil.cs:行号 201
在 HH.SZYD.QCP.Presentation.Presenters.ChannelPartnerPresenter.FileUpLoad() 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Presenters\ChannelPartnerPresenter.cs:行号 220
错误信息:System.Net.Sockets.SocketException (0x80004005): 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)

------------------------------------------------------------------------------------------------------------------------

二.
异常详情:错误信息:System.Net.WebException: 远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。
在 System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
在 System.Net.FtpWebRequest.RequestCallback(Object obj)
在 System.Net.CommandStream.Dispose(Boolean disposing)
在 System.IO.Stream.Close()
在 System.IO.Stream.Dispose()
在 System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
在 System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
在 System.Net.FtpWebRequest.RequestCallback(Object obj)
在 System.Net.CommandStream.Abort(Exception e)
在 System.Net.CommandStream.CheckContinuePipeline()
在 System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)
在 System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
在 System.Net.FtpDataStream.Dispose(Boolean disposing)
在 System.IO.Stream.Close()
在 HH.SZYD.QCP.Presentation.Utils.FtpUtil.Upload(String ftpPath, String fullFileName, String fileName) 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Utils\FtpUtil.cs:行号 205
在 HH.SZYD.QCP.Presentation.Presenters.PromotionPresenter.FileUpLoad() 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Presenters\PromotionPresenter.cs:行号 768

------------------------------------------------------------------------------------------------------------------------


...全文
429 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HenanBoy 2017-02-19
  • 打赏
  • 举报
回复
你在上传的时候,检查一下服务器的链接时候正常,否则弹出错误,链接正常就开始上传。
丰云 2017-02-17
  • 打赏
  • 举报
回复
话说,你这里为什么要用文件流?直接file.SaveAs()不好吗?
liaoyunt07 2017-02-17
  • 打赏
  • 举报
回复
现在还是可以输入ftp地址登录,然后手动上传 因为ftp服务器,不在我们这边,只好先查找到原因
丰云 2017-02-17
  • 打赏
  • 举报
回复
引用 6 楼 liaoyunt07 的回复:
[quote=引用 5 楼 foren_whb 的回复:] 多半是过年的时候,服务器做为系统或硬件的维护了,导致ftp服务停止了。 去服务器,把ftp服务的启动设置为自动,这样以后再有维护,也能自动启动了
但是手动能上传,这是为什么[/quote] 那就是我猜错了
liaoyunt07 2017-02-17
  • 打赏
  • 举报
回复
引用 5 楼 foren_whb 的回复:
多半是过年的时候,服务器做为系统或硬件的维护了,导致ftp服务停止了。 去服务器,把ftp服务的启动设置为自动,这样以后再有维护,也能自动启动了
但是手动能上传,这是为什么
丰云 2017-02-17
  • 打赏
  • 举报
回复
多半是过年的时候,服务器做为系统或硬件的维护了,导致ftp服务停止了。 去服务器,把ftp服务的启动设置为自动,这样以后再有维护,也能自动启动了
丰云 2017-02-17
  • 打赏
  • 举报
回复
你的ftp服务停止了吧
我是三峡移民 2017-02-16
  • 打赏
  • 举报
回复
不是说ftp的服务器要关闭了么
liaoyunt07 2017-02-16
  • 打赏
  • 举报
回复
后面几天就报超时异常: 异常详情:错误信息:System.Net.WebException: 操作已超时。 在 System.Net.FtpWebRequest.GetRequestStream() 在 HH.SZYD.QCP.Presentation.Utils.FtpUtil.Upload(String ftpPath, String fullFileName, String fileName) 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Utils\FtpUtil.cs:行号 194 在 HH.SZYD.QCP.Presentation.Utils.FtpUtil.FileUpLoad(String fileName, String fullFileName) 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Utils\FtpUtil.cs:行号 269 在 HH.SZYD.QCP.Presentation.Presenters.PromotionPresenter.CreateFileUpload_PromoationAndProductRel() 位置 g:\项目工作文件\new\svn\Others\QCP\branches\QCP_V2.0\HH.SZYD.QCP.Presentation\Presenters\PromotionPresenter.cs:行号 828
liaoyunt07 2017-02-16
  • 打赏
  • 举报
回复
上传代码:

        FtpWebRequest reqFTP;
            // 根据uri创建FtpWebRequest对象   
            reqFTP = CreateFtpWebRequest(ftpPath + "/" + fileName);
            // 在一个命令之后被执行  
            reqFTP.KeepAlive = false;
            // 指定执行什么命令  
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            // 指定数据传输类型  
            reqFTP.UseBinary = true;
            // 上传文件时通知服务器文件的大小  
            reqFTP.ContentLength = fileInfo.Length;
            // 缓冲大小设置为2kb  
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            // 打开一个文件流 (System.IO.FileStream) 去读上传的文件  
            FileStream fs = fileInfo.OpenRead();//fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            // 把上传的文件写入流  
            Stream strm = reqFTP.GetRequestStream();
            // 每次读文件流的2kb  
            contentLen = fs.Read(buff, 0, buffLength);
            // 流内容没有结束  
            while (contentLen != 0)
            {
                // 把内容从file stream 写入 upload stream  
                strm.Write(buff, 0, contentLen);
                contentLen = fs.Read(buff, 0, buffLength);
            }
            // 关闭两个流  
            strm.Close();
            fs.Close();

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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