Feedback

C# - ASP.NET - Hochgeladene Dateien zwischenspeichern

Veröffentlicht von am 15.06.2011
(1 Bewertungen)
Jeder, der schon mit Dateiuploads in ASP.NET zu tun hatte, kennt es: Es ist zum Zeitpunkt des Uploads oft noch nicht sicher, ob die Datei auch wirklich abgespeichert werden soll.

Ich kam daraufhin auf die Idee, das HttpPostedFile-Objekt, das man nach dem Upload vom FileUpload-Control bekommt, in die Session zu speichern.
Das funktionierte in der lokalen Testumgebung ganz gut. Jedoch wurde der Stream des Objekts in der Liveumgebung (IIS) vorzeitig geschlossen und somit war das Objekt nutzlos.

Also habe ich einen Wrapper geschrieben!
Dieser speichert eine hochgeladene Datei einfach in ein temporäres Verzeichnis und speichert es mithilfe von .SaveAs (also analog zum Original HttpPostedFile) in einen übergebenen Pfad.
Beim Zerstören des Objekts wird die temporäre Datei wieder gelöscht.

Die Verwendung ist simpel:
HttpPostedFile file = this.FileUpload.PostedFile;
PostedFile postedFile = new PostedFile(file);

dann z.B. in eine Session-Variable speichern:
Session["LastUploadedFile"] = postedFile;

und später wieder einlesen und wegspeichern:
((PostedFile)Session["LastUploadedFile"]).SaveAs("C:\\uploads\\datei1.dat");
((PostedFile)Session["LastUploadedFile"]).Dispose();
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

using System.Web;
using System.IO;
using System;

namespace Tools
{
    /// <summary>
    /// Ein Wrapper für hochgeladene Dateien.
    /// Geeignet, um in Session gespeichert zu werden.
    /// </summary>
    public class PostedFile : IDisposable
    {
        private string _TempPath;
        private string _FileName;

        /// <summary>
        /// Temporärer Speicherpfad.
        /// </summary>
        public string TempPath
        {
            get { return _TempPath; }
        }

        /// <summary>
        /// Dateiname (ohne Pfad)
        /// </summary>
        public string FileName
        {
            get { return _FileName; }
        }

        /// <summary>
        /// Initialisiert eine Objektinstanz anhand einer hochgeladenen Datei.
        /// </summary>
        public PostedFile(HttpPostedFile postedFile)
        {
            // Dateiname zuweisen
            _FileName = Path.GetFileName(postedFile.FileName);

            // Temporären Speicherpfad erzeugen
            _TempPath = Path.GetTempFileName();

            // Datei in temporären Speicherpfad zwischenspeichern
            postedFile.SaveAs(_TempPath);
        }

        /// <summary>
        /// Speichert die Datei in den angegebenen Pfad.
        /// </summary>
        public void SaveAs(string path)
        {
            if (File.Exists(_TempPath))
            {
                File.Copy(_TempPath, path, true);
            }
        }

        /// <summary>
        /// Verwirft das Objekt.
        /// </summary>
        public void Dispose()
        {
            if (File.Exists(_TempPath))
            {
                try
                {
                    File.Delete(_TempPath);
                }
                catch { }
            }
        }
    }
}

Abgelegt unter asp.net, asp, net, httppostedfile, postedfile.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!