c#HTTP POST--需要跟踪POST/上传进度
我的代码可以将文件发布到预先签名的Amazon S3 url。c#HTTP POST--需要跟踪POST/上传进度,c#,http,post,C#,Http,Post,我的代码可以将文件发布到预先签名的Amazon S3 url。但是,我希望跟踪大型文件的发布/上载进度。有没有一种简单的方法可以将其添加到我的代码中?我该怎么做呢?我不需要进度条,只需要向控制台输出完成的文件传输百分比,例如: 123等 WebRequest request = WebRequest.Create(PUT_URL_FINAL[0]); //PUT_URL_FINAL IS THE PRE-SIGNED AMAZON S3 URL THAT I AM SENDING THE FIL
但是,我希望跟踪大型文件的发布/上载进度。有没有一种简单的方法可以将其添加到我的代码中?我该怎么做呢?
我不需要进度条,只需要向控制台输出完成的文件传输百分比,例如:
1
2
3
等
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
request.Method = "PUT";
//result3 is the filename that I am sending
request.ContentType = MimeType(result3)
byte[] byteArray =
File.ReadAllBytes(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);
我会使用WebClient的
UploadDataAsync()
,并与它的UploadProgressChanged
相结合
--更新:将示例更改为使用UploadDataAsync而不是UploadFileAsync
MSDN中经过轻微修改的样品:
public static void UploadDataInBackground (string address, byte[] data)
{
WebClient client = new WebClient ();
Uri uri = new Uri(address);
// Specify a progress notification handler.
client.UploadProgressChanged += new UploadProgressChangedEventHandler(UploadProgressCallback);
client.UploadDataAsync (uri, "POST", data);
Console.WriteLine ("Data upload started.");
}
private static void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
{
// Displays the operation identifier, and the transfer progress.
Console.WriteLine("{0} uploaded {1} of {2} bytes. {3} % complete...",
(string)e.UserState,
e.BytesSent,
e.TotalBytesToSend,
e.ProgressPercentage);
}
当我使用S3的预签名URL时,我需要将内容类型(.ContentType)传递给S3,否则它将不允许我发布到S3。我可以用这个代码吗?如果是这样,你能修改代码来告诉我怎么做吗?我还需要它是同步的,而不是异步的。我可以只用“UploadData”方法吗?如果我这样做,它不会触发事件吗?我不确定。为什么需要同步?我需要在文件传输完成后进行一些处理,但处理取决于传输是否成功。您可以通过连接WebClient.OnUploadDataCompleted事件来完成上传后代码(成功或失败)。检查UploadDataCompletedEventArgs类型的参数,以获取正在设置的错误属性。