Как я могу быстро загрузить файл в MVC с помощью C#
Я реализовал один из них asp.net сайт MVC, где пользователи могут скачивать большие MP3-файлы (до 120 МБ) и прекрасно работает. Но проблема в том, что когда мы отправляем запрос на загрузку файла, то загрузка начинается правильно, но мы не можем выполнить никаких действий на сайте до тех пор, пока файл полностью не загрузится (не получая никакого ответа на любой другой запрос). Как я могу сделать быструю загрузку файла и другой запрос также отправить ответ вместе с загрузкой файлов? Мои файлы хранятся в большом двоичном объекте хранилища Microsoft Azure.
Что я уже пробовал:
public async Task<string> DownloadMediaFile(string url) { int lstidx = url.LastIndexOf('/'); int charslngth = url.Length - 1; string getFileNameWithExtension = url.Substring(lstidx + 1, charslngth - lstidx); string fileName = getFileNameWithExtension; //Create a stream for the file Stream stream = null; //This controls how many bytes to read at a time and send to the client int bytesToRead = 10000; // Buffer to read bytes in chunk size specified above byte[] buffer = new Byte[bytesToRead]; // The number of bytes read try { //Create a WebRequest to get the file HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(url); //Create a response for this request HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse(); if (fileReq.ContentLength > 0) fileResp.ContentLength = fileReq.ContentLength; //Get the Stream returned from the response stream = fileResp.GetResponseStream(); // prepare the response to the client. resp is the client Response var resp = Response; //Indicate the type of data being sent resp.ContentType = "application/octet-stream"; //Name the file resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); resp.AddHeader("Content-Length", fileResp.ContentLength.ToString()); int length; do { // Verify that the client is connected. if (resp.IsClientConnected) { // Read data into the buffer. length = stream.Read(buffer, 0, bytesToRead); // and write it out to the response's output stream resp.OutputStream.Write(buffer, 0, length); // Flush the data resp.Flush(); //Clear the buffer buffer = new Byte[bytesToRead]; } else { // cancel the download if client has disconnected length = -1; } } while (length > 0); //Repeat until no data is read } finally { if (stream != null) { //Close the input stream stream.Close(); } } return "success"; }