在C#.Net中使用HttpWebRequest异步上传大文件

时间:2011-04-25 04:55:09

标签: c# httpwebrequest

我想使用HttpWebRequest以异步方式上传大文件。

假设我使用HttpWebRequest&上传了一个音频文件。在接收器端,它应该得到流&播放音频文件。

是否有可用于ref的代码或示例。 ?

如果有任何例子,请提供。

提前致谢

2 个答案:

答案 0 :(得分:1)

是否必须是HttpWebRequest?您可以使用WebClient对象

轻松完成此操作
public void UploadFile(byte[] fileData)
{
    var client = new WebClient();
    client.UploadDataCompleted += client_UploadDataCompleted;
    client.UploadDataAsync(new Uri("http://myuploadlocation.example.com/"), fileData);
}

void client_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show(e.Error.Message);
    }

    byte[] response = e.Result;
}

答案 1 :(得分:1)

如果必须使用HttpWebRequest并假设您的输入数据流不大,则可以通过执行此操作使上载过程成为异步。请注意,BeginGetResponse实际上是打开与远程服务器的连接并处理上载的内容。

public void UploadAsync()
{
    var data = GetStream("TestFile.txt");

    var request = (HttpWebRequest)WebRequest.Create(new Uri("http://example.com/UploadData"));
    request.Method = "POST";
    data.CopyTo(request.GetRequestStream());

    request.BeginGetResponse(DataUploadCompleted, request);

    Console.WriteLine("Upload Initiated.");
}

private void DataUploadCompleted(IAsyncResult ar)
{
    var request = (HttpWebRequest)ar.AsyncState;
    var response = request.EndGetResponse(ar);
    Console.WriteLine("Upload Complete.");
}