Dateien von Remote-URLs in ASP.NET streamen oder herunterladen
Problem:
Sie Sie müssen eine Datei von einer Remote-URL streamen oder herunterladen und sie als Dialogfeld „Speichern unter“ im Browser anzeigen. Das Verzeichnis der Datei ist jedoch virtuell, sodass mit herkömmlichen Methoden wie Server.MapPath nicht darauf zugegriffen werden kann.
Lösung:
Verwenden Sie HttpWebRequest, um die Datei von der URL und dem Stream abzurufen es an den Kunden zurück. Mit diesem Ansatz können Sie mit Dateien arbeiten, auf die nur über eine URL zugegriffen werden kann.
Hier ist ein Codebeispiel:
//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(); } }
Das obige ist der detaillierte Inhalt vonWie streame oder lade ich Dateien von Remote-URLs in ASP.NET herunter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!