In bestimmten Szenarien kann es notwendig sein, eine Datei von einer Remote-URL zu streamen oder herunterzuladen und ein „ „Speichern unter“-Eingabeaufforderung im Browser. Wenn sich die Datei jedoch in einem virtuell zugeordneten Verzeichnis befindet, kann der Zugriff auf ihren tatsächlichen Speicherort über Server.MapPath eine Herausforderung sein.
Stattdessen können Sie die Leistungsfähigkeit von HttpWebRequest nutzen, um diese Funktionalität zu erreichen. Hier ist ein Beispiel, mit dem Sie eine Web-URL übergeben können:
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(); } } } } }
Mit diesem Ansatz können Sie Dateien von Remote-URLs streamen und Benutzern ermöglichen, sie lokal mit einem dynamisch generierten Dateinamen zu speichern.
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien von einer Remote-URL in ASP.NET herunter und streame sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!