【问题标题】:FtpWebRequest closing the upload stream hangs on large files关闭上传流的 FtpWebRequest 挂在大文件上
【发布时间】:2012-01-18 18:29:56
【问题描述】:

我正在尝试使用 FtpWebRequest 上传一些文件。这适用于较小的文件(例如

我可以 a) 不关闭它并且 b) 不费心从服务器获取响应,但这似乎不对!见下面的代码(不管是否使用SSL,都会出现同样的问题。)

output.Close() 是挂起的那一行....

    public static void SendFileViaFtp(string file, string url, bool useSsl, ICredentials credentials)
    {

        var request = (FtpWebRequest)WebRequest.Create(url + Path.GetFileName(file));
        request.EnableSsl = useSsl;
        request.UseBinary = true;
        request.Credentials = credentials;

        request.Method = WebRequestMethods.Ftp.UploadFile;

        request.Timeout = 10000000;
        request.ReadWriteTimeout = 10000000;
        request.KeepAlive = true;

        var input = File.Open(file, FileMode.Open);
        var output = request.GetRequestStream();

        var buffer = new byte[1024];
        var lastBytesRead = -1;
        var i = 0;
        while (lastBytesRead != 0)
        {
            i++;
            lastBytesRead = input.Read(buffer, 0, 1024);
            Debug.WriteLine(lastBytesRead + " " + i);
            if (lastBytesRead > 0)
            {
                output.Write(buffer, 0, lastBytesRead);
            }else
            {
                Debug.WriteLine("Finished");
            }
        }
        input.Close();
        output.Close();

        var response = (FtpWebResponse)request.GetResponse();
        response.Close();
    }

谢谢,

【问题讨论】:

  • 您确定关闭它时它没有发送整个 16mb 吗?仅仅因为您将数据写入流并不意味着它已被发送。
  • 是的。可以在 ftp 服务器上看到该文件....并已成功打开它。
  • 情节变厚了。在我的家用电脑上执行此操作...

标签: c# .net


【解决方案1】:

试试

// after finished uploading
request.Abort();   // <=== MAGIC PART
// befor response.Close()

var response = (FtpWebResponse)request.GetResponse();
response.Close();

取自here

【讨论】:

    【解决方案2】:

    尝试在输入之前关闭输出。

    确保最后一个缓冲区不要太大,否则您可以写入几个空字节。 我不知道是否有必要,但我总是将请求内容长度设置为输入文件长度。

    这是一个很好的例子:http://dotnet-snippets.de/dns/ftp-file-upload-mit-buffer-SID886.aspx

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多