Downloadfunktion

27/01/2010 - 14:16 von Christian Mauerer | Report spam
Hallo,

ich habe eine kleine Webanwendung geschrieben.
Dabei soll die Möglichkeit bestehen, dass die User Bilder downloaden können.

Nun ist es ja so, dass ich einen Link auf das Bild machen kann. Doch dann
wird dieses Bild wieder im Browser geladen, da es sich beim Bild ja um eine
Datei handelt, welche der Browser selbst darstellen kann.
Aber genau das möchte ich nicht haben.
Es soll einen Button geben. Auf diesen klickt der User und dann soll der
Download starten. Also dem User der Dialog zum Speichern der Datei angezeigt
werden.
Doch wie stelle ich das an?

Vielen Dank schon mal und schöne Grüße
Christian
 

Lesen sie die antworten

#1 Alexey Smirnov
27/01/2010 - 22:23 | Warnen spam
On Jan 27, 2:16 pm, "Christian Mauerer"
wrote:
Hallo,

ich habe eine kleine Webanwendung geschrieben.
Dabei soll die Möglichkeit bestehen, dass die User Bilder downloaden können.

Nun ist es ja so, dass ich einen Link auf das Bild machen kann. Doch dann
wird dieses Bild wieder im Browser geladen, da es sich beim Bild ja um eine
Datei handelt, welche der Browser selbst darstellen kann.
Aber genau das möchte ich nicht haben.
Es soll einen Button geben. Auf diesen klickt der User und dann soll der
Download starten. Also dem User der Dialog zum Speichern der Datei angezeigt
werden.
Doch wie stelle ich das an?

Vielen Dank schon mal und schöne Grüße
Christian



Hi Christian,

Der Download-Dialog startet wenn ein content-type HTTP Header gesetzt
ist. Also, du brauchst eine Zwischenseite, am besten einen Generic
Hander (*.ashx)

Beispielcode für ashx

using ( FileStream fs = new FileStream(@"...\bild.jpg", FileMode.Open,
FileAccess.Read))
{
byte[] buffer = new byte[(int)fs.Length];
fs.Read(buffer, 0, (int)fs.Length);

HttpResponse r = this.Context.Response;
r.Clear();
r.AppendHeader("Content-Disposition", "attachment;
filename=bild.jpg");
r.BinaryWrite(buffer);
r.Flush();
r.End();
}

Dann kannst du auch noch eine Content-Length senden, damit der Browser
dem Benutzer anzeigen kann, wie weit der Download ist.

r.AppendHeader("Content-Length", buffer.Length.ToString());

Grüß

Ähnliche fragen