Maison >développement back-end >C++ >Comment télécharger et diffuser des fichiers à partir d'une URL distante dans ASP.NET ?
Dans certains scénarios, il peut être nécessaire de diffuser ou de télécharger un fichier à partir d'une URL distante et de déclencher un " Invite "Enregistrer sous" dans le navigateur. Cependant, lorsque le fichier se trouve dans un répertoire virtuellement mappé, accéder à son emplacement réel à l'aide de Server.MapPath peut être difficile.
Au lieu de cela, vous pouvez exploiter la puissance de HttpWebRequest pour obtenir cette fonctionnalité. Voici un exemple qui vous permet de transmettre une URL Web :
using System.IO; using System.Net; namespace FileDownloader { public static class FileDownloader { public static void DownloadFile(string url, string fileName) { // Create a stream for the file Stream stream = null; // Configure streaming chunk size int bytesToRead = 10000; // Buffer to read bytes in specified chunk size byte[] buffer = new Byte[bytesToRead]; // Initialize response HttpWebResponse fileResp = null; try { // Create a WebRequest to get the file HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(url); // Get a response for this request fileResp = (HttpWebResponse)fileReq.GetResponse(); // Get the Stream returned from the response stream = fileResp.GetResponseStream(); // Prepare the response to the client HttpResponse resp = HttpContext.Current.Response; // Set response type and add headers resp.ContentType = MediaTypeNames.Application.Octet; resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); resp.AddHeader("Content-Length", fileResp.ContentLength.ToString()); int length; do { // Verify client connection if (resp.IsClientConnected) { // Read data into the buffer length = stream.Read(buffer, 0, bytesToRead); // Write data 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 download if client disconnects length = -1; } } while (length > 0); // Repeat until no data remains } finally { // Close the input stream if (stream != null) { stream.Close(); } // Dispose the response if (fileResp != null) { fileResp.Close(); } } } } }
En utilisant cette approche, vous pouvez diffuser des fichiers à partir d'URL distantes et permettre aux utilisateurs de les enregistrer localement avec un nom de fichier généré dynamiquement.
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!