Laden...

Download einer Datei

Erstellt von Cindy vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.741 Views
C
Cindy Themenstarter:in
27 Beiträge seit 2007
vor 15 Jahren
Download einer Datei

Hallo zusammen,

ich habe auf einer Testseite einen Button. Mit Klick auf diesen Button, möchte ich eine Datei herunterladen, die auf einem Server liegt. Da ich momentan aber noch nicht auf dem Server testen kann, habe ich versucht es auf meinem Rechner zu simulieren, daher diese etwas vereinfachte Lösung:


protected void Button1_Click(object sender, EventArgs e)
    {
        string url = @"C:\download.txt"; //Quelle
        string filename = @"C:\Test"; //Ziel
        WebClient client = new WebClient();
        try
        {
            client.DownloadFile(url, filename);
            byte[] bArrErgebnis = client.DownloadData(url);
            string strErgebnis = client.DownloadString(url);
            Stream stream = client.OpenRead(url);
        }
        catch (WebException exc)
        {
            Console.WriteLine(exc);
        }
        catch (UriFormatException exc)
        {
            Console.WriteLine(exc);
        }
    }

Leider passiert nicht allzu viel und eine Exception wird geworfen. Vielleicht könnt ihr mir helfen und mir sagen, was ich falsch gemacht habe. Ich weiß ja nicht mal, ob ich überhaupt auf dem richtigen Weg bin.

Danke schon einmal im Voraus.

Grüße,Cindy

2.760 Beiträge seit 2006
vor 15 Jahren

Hallo

Der Text der Exception wäre sehr hilfreich. Ich glaube auch nicht das du mit der WebClient-Klasse auf Dateien im Filesystem zugreifen kannst. Installiere dir zum testen lieber einen Xammp oder IIS und teste dann mit 'localhost'.

313 Beiträge seit 2006
vor 15 Jahren

Ja genau, das ist richtig. Ansonsten funktioniert das prorgamm, einfach mal http://www.google.de einbauen udn es haut super hin

C
Cindy Themenstarter:in
27 Beiträge seit 2007
vor 15 Jahren

Mmh, also wenn ich den Code so lasse, wie im ersten Beitrag, dann wird mir folgendes gesagt

"Eine Ausnahme (erste Chance) des Typs "System.Net.WebException" ist in System.dll aufgetreten."

Nun habe ich den Code dann mal folgendermaßen abgeändert:


    protected void Button1_Click(object sender, EventArgs e)
    {
        string url = @"C:\download.txt";
        string filename = @"C:\Test";
        WebClient client = new WebClient();
        client.DownloadFile(url, filename);
        byte[] bArrErgebnis = client.DownloadData(url);
        string strErgebnis = client.DownloadString(url);
        Stream stream = client.OpenRead(url);
    }

Ich bekomme folgende Fehlermeldung:
"WebException wurde nicht von Benutzercode behandelt.Ausnahmefehler während einer WebClient-Anforderung."

So ganz richtig kann es doch dann nicht sein,oder?

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Cindy

Was du benötigst, liegt im Namespace "System.IO" - schau dir mal hier unter Artikel folgendes an:

Der WebClient ist für Remoteadresse, du arbeitest hier aber lokal auf dem Dateisystem.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

C
Cindy Themenstarter:in
27 Beiträge seit 2007
vor 15 Jahren

Hallöchen,

nach ausführlicherer Recherche hat es nun funktioniert. Ich habe das ganze folgendermaßen gemacht:


    protected void Button1_Click(object sender, EventArgs e)
    {
        string path=Request.PhysicalApplicationPath;
        string fname="example.doc";
        FileInfo myFileInfo = new FileInfo(path + fname);
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + myFileInfo.Name);
        Response.AddHeader("Content-Length", myFileInfo.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.WriteFile(myFileInfo.FullName);
        Response.End();
    }

Danke für die Hilfe hier im Forum.

Grüße, Cindy

5.942 Beiträge seit 2005
vor 15 Jahren

Salute Cindy

So sollte man das eben nicht machen.
Verwende dazu HttpHandler, siehe:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011