将图像上传到 FTP 时出现错误

Posted

技术标签:

【中文标题】将图像上传到 FTP 时出现错误【英文标题】:Errors coming while uploading images to FTP 【发布时间】:2013-10-15 13:58:38 【问题描述】:

我在这个函数中遇到了很多不同的问题:

public static bool UploadToFTP(string strFileName, string strFolderName)
        
            bool isUploaded = false;
            string strFilename = string.Empty;
            string strFtpURI = string.Empty;
            string strFtpUserId = string.Empty;
            string strFtpPassword = string.Empty;
            byte[] buffer = null;
            FileInfo oFileInfo = null;
            FileStream oFileStream = null;
            FtpWebRequest oFtpWebRequest = null;

            try
            
                strFilename = strFileName;
                oFileInfo = new FileInfo(strFilename);
                strFtpURI = Constants.FtpUri;
                strFtpUserId = Constants.FtpUserID;
                strFtpPassword = Constants.FtpPassword;

                oFtpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFtpURI + "/" + strFolderName + "/" + oFileInfo.Name));

                oFtpWebRequest.Credentials = new NetworkCredential(strFtpUserId, strFtpPassword);
                oFtpWebRequest.Proxy = null;
                oFtpWebRequest.KeepAlive = false;
                oFtpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
                oFtpWebRequest.UseBinary = true;
                oFtpWebRequest.ContentLength = oFileInfo.Length;

                int iBufferLength = 2084;

                buffer = new byte[iBufferLength];

                int iContentLength = 0;

                oFileStream = oFileInfo.OpenRead();

                try
                
                    iContentLength = oFileStream.Read(buffer, 0, iBufferLength);

                    using (Stream oStream = oFtpWebRequest.GetRequestStream())
                    
                        while (iContentLength != 0)
                        
                            oStream.Write(buffer, 0, iContentLength);

                            iContentLength = oFileStream.Read(buffer, 0, iBufferLength);
                        
                        isUploaded = true;
                        FtpUpload.TotalKBFilesUploaded =  FtpUpload.TotalKBFilesUploaded + (int)(oFileInfo.Length / 1000);
                    
                
                catch (Exception ex)
                

                
                finally
                
                    if (oFtpWebRequest != null)
                    
                        oFtpWebRequest.Abort();
                        oFtpWebRequest = null;
                    

                    if (buffer != null)
                    
                        buffer = null;
                    

                    if (oFileStream != null)
                    
                        oFileStream.Close();
                        oFileStream.Dispose();
                    
                
            
            catch (Exception ex)
            
            
            finally
            
                oFileInfo = null;
            

            return isUploaded;
        

这是上传1000张图片到FTP,这个方法是多线程调用的。

不同的错误是:

============================================== ===========

消息:操作已超时

错误跟踪:在 System.Net.FtpWebRequest.CheckError() 在 System.Net.FtpWebRequest.GetRequestStream()

============================================== ===========

错误信息:无法连接到远程服务器

错误跟踪:在 System.Net.FtpWebRequest.CheckError() 在 System.Net.FtpWebRequest.GetRequestStream()

============================================== ===========

错误消息:底层连接已关闭:接收时发生意外错误。

错误跟踪:在 System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 的 System.Net.FtpWebRequest.CheckError() 在 System.Net.CommandStream.Abort(Exception e) 在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage阶段)在 System.Net.FtpWebRequest.GetRequestStream()

============================================== ===========

错误信息:无法将数据写入传输连接:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

错误跟踪:在 System.Net.Sockets.NetworkStream.Write(Byte[] 缓冲区,Int32 偏移量,Int32 大小) 在 System.Net.FtpDataStream.Write(Byte[] 缓冲区,Int32 偏移量,Int32 大小) ================================================ ========

这些错误来自我从 LOG 文件中检索到的相同方法。

知道是什么原因造成的吗?或者我需要提供更多细节?

【问题讨论】:

您似乎需要与您组织中的 n/w 人员交谈。我看到所有错误都是n/w connectivity issuesserver not responding 正确! 【参考方案1】:

达到超时时遇到以下异常:

错误消息:底层连接已关闭:接收时发生意外错误。

如 msdn 文档中所述,超时的默认值是无限的,但 msdn 文档包含一个错误: http://msdn.microsoft.com/fr-fr/library/vstudio/system.net.ftpwebrequest.timeout(v=vs.80).aspx

事实上,默认值为 100000 毫秒(1 分 40 秒),因此您可以将 Timeout 值声明为无限:oFtpWebRequest.Timeout = -1;

http://www.sidesofmarch.com/index.php/archive/2012/04/06/damn-the-documentation-ftpwebrequest-timeout-default-value-is-not-infinite/

【讨论】:

以上是关于将图像上传到 FTP 时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.NET Core Web API 将图像上传到 Cloudianary 时出现空文件错误

在 React Native 中将图像上传到 Firebase 存储时出现错误 400 Bad Request

尝试通过 XCode 上传二进制文件时出现“无效的图像路径”错误

从 React 前端将图像上传到烧瓶后端时出现 KeyError 'image'

尝试使用 MERN 上传图像时出现 400 错误请求错误

上传图像以使用 keras 进行预测时出现错误消息