【发布时间】: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 服务器上看到该文件....并已成功打开它。
-
情节变厚了。在我的家用电脑上执行此操作...