对于一个小的更多背景,请访问:Problem with C# HTTP PUT request code的WebRequest - .timeout问题
我现在用的是C#WebRequest的方法将文件上传到S3。我已经有了一个预先签名的URL,S3正在给我上传。我原本遇到了一个问题,如果我正在上传一个大文件,转移将在开始后几分钟停止。对我的其他帖子发表评论说,这是造成它的时间。果然如此。
我的问题是这样的:我应该根据我要传输的文件的大小来设置.timeout或我该如何计算要设置它的内容?
我不想以60分钟的超时时间启动WebRequest,因为我只是要将一个小文件发送到S3,但是我又可以将一个千兆字节文件上传到S3,并且如果超时时间结束在文件完成之前,传输将被中断。
另外我怎么会陷阱连接超时? .timeout会被用于这个吗?如果我只想尝试连接30秒以查看S3是否响应了我的Web PUT请求,如果没有超时,该怎么办?
我的代码是:
WebRequest request = WebRequest.Create(PUT_URL_FINAL[0]);
//PUT_URL_FINAL IS THE PRE-SIGNED AMAZON S3 URL THAT I AM SENDING THE FILE TO
request.Timeout = 360000; //6 minutes -- If the transfer is over 6 minutes, it stops.
request.Method = "PUT";
//result3 is the filename that I am sending
request.ContentType =
MimeType(GlobalClass.AppDir + Path.DirectorySeparatorChar + "unzip" +
Path.DirectorySeparatorChar +
System.Web.HttpUtility.UrlEncode(result3));
byte[] byteArray =
File.ReadAllBytes(
GlobalClass.AppDir + Path.DirectorySeparatorChar + "unzip" +
Path.DirectorySeparatorChar +
System.Web.HttpUtility.UrlEncode(result3));
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
//This will return "OK" if successful.
WebResponse response = request.GetResponse();
Console.WriteLine("++ HttpWebResponse: " +
((HttpWebResponse)response).StatusDescription);
顺便说一下,您的“Stream”和“WebResponse”对象需要在'使用'区块内。 –