3 Stimmen

Alternative zu Response.TransmitFile für die Übertragung von Dateien über HTTP

Ich arbeite an einer ASP.NET-Website, über die Benutzer Dateien herunterladen können.

Zuvor waren die Dateien auf demselben Server wie die Website gespeichert, so dass wir das tun konnten:

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(path);
Response.End();

Nun sind jedoch einige der Dateien auf einem separaten Server gespeichert. Ich kann überprüfen, ob die Dateien vorhanden sind, indem ich

WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();

Aber wie kann ich die Übertragung erleichtern, da TransmitFile einen virtuellen Pfad und nicht eine URL benötigt?

Ich möchte, dass die Benutzer auswählen können, wo sie die Datei wie bei einem normalen Web-Download speichern möchten.

Wie kann man das am besten machen?

5voto

TrystanC Punkte 321

Wenn Sie den Antwortstrom über eine Webanforderung abrufen können, sollten Sie in der Lage sein, den Strom in Ihren Ausgabestrom zu kopieren, wie in diesem Ausschnitt dargestellt:

while ((read = stream.Read(buffer, offset, chunkSize)) > 0)    
{

    Response.OutputStream.Write(buffer, 0, read);
    Response.Flush();
}

2voto

Sie können TransferFile nicht für entfernte Dateien verwenden. Aber Sie können WriteFile für diese Datei verwenden.

1voto

David Punkte 33347
  1. Können Sie den Benutzer auf die URL des anderen Servers umleiten?
  2. Sie könnten die Anfrage an den anderen Server weiterleiten. Wenn Sie "GetResponse" aufrufen, nehmen Sie den Stream und schreiben dessen Inhalt in Ihr Response-Objekt.

0voto

Keith Adler Punkte 20478

Sie könnten die Laufwerke der entfernten Server als Freigaben zuordnen und dann TransmitFile verwenden. Wenn die Server keine Sichtverbindung haben, können Sie WebDAV auf dem/den entfernten Server(n) aktivieren und sie dann einem physischen Pfad zuordnen und TransmitFile verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X