加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 将图像上传到FTP时出错

发布时间:2020-12-16 04:33:11 所属栏目:asp.Net 来源:网络整理
导读:我在这个函数中遇到了很多不同的问题: public static bool UploadToFTP(string strFileName,string strFolderName) { bool isUploaded = false; string strFilename = string.Empty; string strFtpURI = string.Empty; string strFtpUserId = string.Empty;
我在这个函数中遇到了很多不同的问题:
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,iBufferLength);

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

                            iContentLength = oFileStream.Read(buffer,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.GetRequestStream()处的System.Net.FtpWebRequest.CheckError()处

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

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

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

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

错误消息:基础连接已关闭:接收时发生意外错误.

错误跟踪:System.Net上的System.Net.FtpWebRequest.CheckError()位于System.Net.FtpWebRequest.FinpRequestStage(RequestStage阶段)的System.Net.CommandStream.Abort(Exception e)上的System.Net.FtpWebRequest.SyncRequestCallback(Object obj)处System.Net.FtpWebRequest.GetRequestStream()

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

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

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

这些是来自我从LOG文件中检索的相同方法的一些错误.

什么可能导致这个?或者我需要提供更多细节?

解决方法

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

Error Message:The underlying connection was closed: An unexpected error occurred on a receive.

正如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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读