FtpWebRequest上传内存不足

Guy*_*Guy 3 ftpwebrequest

我在这里使用这个例子:http: //msdn.microsoft.com/en-us/library/ms229715.aspx 将一个大的1GB文件上传到FTP服务器.然而它在线上窒息:

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

有一个内存不足的例外.有没有办法将文件从磁盘直接流式传输到FTP服务器,而无需立即将所有文件读入内存?我希望我可以将它分块并一点一点地发送它,但我想我能够将读取流指向写入流...

Jon*_*eet 5

您可以尝试简单地以块的形式写入请求流 - 如果您使用的是.NET 4,那么Stream.CopyTo这将非常简单:

using (Stream input = File.OpenRead(filename))
{
    using (Stream output = request.GetRequestStream())
    {
        input.CopyTo(output);
    }
}
Run Code Online (Sandbox Code Playgroud)

你可能想查看一下FtpWebRequest文档,看看是否有关于缓冲的内容 - 基本上你想要禁用那里的任何缓冲.

(另一方面,在没有using语句的资源处理方面,它在MSDN中是一个令人震惊的糟糕示例.Ick.)