Zum Inhalt springen

ASP.NET Datei-Download - Fragen


daTom

Empfohlene Beiträge

Hallo,

ich habe hier eine ASP.NET (3.5) Seite, auf der ein Grid angezeigt wird.

Ich habe nun die Anforderung, dass aus dem Inhalt des Grids eine Batch Datei generiert werden soll, die der User dann herunterladen kann.

Das Erstellen der Datei und funktioniert wunderbar. Der Download klappt auch soweit, allerdings stosse ich hier auf eine kleine Schwierigkeit,

bei der ich gerade nicht weiter weiß.

Hier erstmal der Code


            string fileName = Server.MapPath("Stapel.bat");

            System.IO.FileInfo fInfo = new System.IO.FileInfo(fileName);

            fInfo.Delete();

            object oDS = this.Session["data"];

            DataSet ds;

            if (oDS != null && oDS is DataSet) {

                ds = (DataSet)oDS;

                StreamWriter sWriter = new FileInfo(Server.MapPath("Stapel.bat")).CreateText();

                foreach (DataRow o in ds.Tables[0].Rows) {

                    sWriter.WriteLine("call clb " + o[0].ToString());

                }

            }

            Response.AddHeader("Content-Disposition", "attachment; filename=" + fInfo.Name);

            Response.AddHeader("Content-Length", fInfo.Length.ToString());

            Response.ContentType = "application/octet-stream";

            Response.WriteFile(fInfo.FullName);

            Response.End();

Mir ist aufgefallen, dass
StreamWriter sWriter = new FileInfo(Server.MapPath("Stapel.bat")).CreateText();

die Datei in mein Projektverzeichnis ablegt. Ich weiß nicht wie der Pfad auf dem Server aussehen würde, allerdings liegt hier gerade mein Problem.

Dadurch, dass die Datei dort in dem Pfad gespeichert wird, kann es passieren, dass 2 Benutzer gleichzeitig auf den Pfad zugreifen wollen.

Das ist natürlich alles andere als schön, allerdings fällt mir im Moment keine gescheite Lösung für das Problem ein.

Ich hatte schon überlegt einen Ordner (Zufallszahl) anzulegen, allerdings ist dann das Löschen der Datei beim Beenden der Sitzung etwas schwieriger.

Dafür gibt es doch bestimmt eine elegantere Lösung?!

Hat jemand von euch vielleicht nen Tip für mich?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Ok,

ich habe eine Lösung gefunden.

Ich habe eine Global.asax Datei erstellt.

In der Methode Session_Start lege ich nun den Ordner mit der ID an und speicher mir den absoluten Pfad in einer Session Variable.

Analog dazu hol ich mir in der Session_End Methode den Pfad aus der Session Variable heraus und lösche das Verzeichnis mit der absoluten Pfadangabe.

Server.MapPath kann man leider nicht in der Session_End Methode verwenden, deswegen muss ich den Schritt mit der absoluten Pfadangabe machen.

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...