Asynchronous Upload of Large File Using HttpWebReq

2019-03-06 20:13发布

问题:

I want to upload a large file in asynchronous way using HttpWebRequest.

Say i upload a audio file from using HttpWebRequest & on the receiver end it should get the stream & play the audio file.

Is there any code or example availabel for ref. ?

Please provide if any example.

Thanks in advance

回答1:

If you have to use HttpWebRequest and assuming your input data stream is not large you can make the upload process Async by doing this. Notice the BeginGetResponse is what actually opens the connection to the remote server and processes the upload.

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.");
}


回答2:

Does it have to be a HttpWebRequest? You can do this very easily with the WebClient object

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;
}