Téléchargement et streaming de fichiers à partir d'URL dans ASP.NET
Dans ASP.NET, les fichiers en streaming qui demandent des invites d'enregistrement dans le navigateur peuvent être réalisé en utilisant Server.MapPath. Toutefois, lorsque le fichier se trouve dans un répertoire virtuellement mappé, cette méthode peut ne pas fonctionner. Voici une solution alternative utilisant HttpWebRequest pour diffuser des fichiers à partir d'URL :
//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 = HttpContext.Current.Response; //Indicate the type of data being sent resp.ContentType = MediaTypeNames.Application.Octet; //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(); } }
Ce code vous permet de spécifier une URL pour le fichier, qui peut être située n'importe où, quel que soit l'emplacement physique du site Web. Il configure les en-têtes appropriés et diffuse le fichier au client en morceaux, offrant ainsi une expérience de téléchargement transparente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!