Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 437
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

ASP.NET - Hochgeladene Dateien zwischenspeichern


Autor: Curry
Sprache: C#
Bewertung: 7,4
(1 Bewertung)
Anzahl der Aufrufe: 1708
  
Kick it on dotnet-kicks.de  

Beschreibung:

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();


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



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 { }
            }
        }
    }
}

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.