Wie "provisorisch" Bilder auf dem Webserver pro Sitzung in ASP.NET und C # gespeichert werden

8

Ich habe mich schon eine Weile umgesehen und fühle, dass ich eine besonders einzigartige Situation habe.

Ich erstelle ein Bild von einem Drittanbieterprogramm (das ich in meine C # -App einbettete), das im Dateisystem meines Webservers gespeichert wird. Kennen Sie effiziente Möglichkeiten, diese Bilder nach Abschluss einer bestimmten Sitzung zu entsorgen?

Für Klarheit: Anfangs dachte ich über einen Ordner nach (für meine Bilder, der nach Sitzungs-ID gespeichert wurde), dessen Inhalt automatisch alle 24 Stunden oder so gelöscht wird. Ich mag diese Idee nicht, weil sie nicht wirklich skalierbar ist.

Ich habe auch die dynamische ASP.NET-Bildgenerierung von dieser Website betrachtet. Ссылка

Das scheint jedoch etwas übertrieben zu sein, weil mein Bild auf die eine oder andere Weise im Dateisystem gespeichert werden muss. Wenn ich das Bild als statischen Namen speichere, dann erzeuge ich eine Bitmap mit der oben erwähnten Methode. Ich bin besorgt, dass die gleichzeitige Verwendung die Anwendung beschädigen könnte.

Ich speichere die Dateinamen mit der Sitzungs-ID im Namen, aber ich finde keine effiziente Möglichkeit, die Bilder nach dem Ende der Sitzung zu bereinigen.

Danke!

-Dave

Update: Ich mag so gut wie alle bisher vorgestellten Lösungen (ich glaube nicht, dass die Datenbank funktioniert, weil ich Bilder exportiere). Ich schätze all Ihre Hilfe ... Ich werde anfangen, an der Implementierung zu arbeiten diese und werden zurück melden, die am besten funktionieren scheint!

Update2: Ich habe nach dem Zufallsprinzip Bildnamen erzeugt, gespeichert und sie am Ende der Sitzung entfernt, danke für all Ihre Hilfe. Alle vorgestellten Methoden waren jedoch ausgezeichnete Vorschläge. Für diese besondere Situation funktioniert diese Methode am besten.

    
Dave 30.06.2009, 19:44
quelle

5 Antworten

2

Verfolgen Sie die temporären Dateinamen in einer Liste und entfernen Sie sie im Session_End-Ereignis oder im Lade- oder Initialisierungsereignis jeder Seite, überprüfen Sie programmgesteuert das Sitzungszeitlimit und entfernen Sie die Dateien.

Etwas wie:

%Vor%     
user79755 30.06.2009, 20:08
quelle
6

Wie wäre es mit dem Hinzufügen einer Global.asax-Datei zu Ihrer Website und im Session_End-Ereignis entfernen Sie die Datei.

%Vor%     
JohnC 30.06.2009 19:49
quelle
2

Gibt es eine Möglichkeit, dass der Endnutzer zurückkommt und sagt, dass das Bild, das Sie geliefert haben, nicht das ist, wonach Sie gefragt haben? Dann werde ich zweimal über die Löschung nach dem Gebrauch nachdenken. Verwenden Sie stattdessen eine Archivierungsstrategie. Sonst

(i) Verwenden Sie die Sitzungsvariablen und bereinigen Sie das session_end (ii) Säubere das Dateisystem nach x Stunden (iii) Speichern Sie die Informationen über das Bild in einer Datenbanktabelle. Behalten Sie die letzte Zugriffszeit im Auge und löschen Sie sie, sobald sie älter ist als 'x' Stunden. (iv) Wenn Sie SQL Server 2008 verwenden, speichern Sie das Image selbst als Datei oder Binärdatei, und löschen Sie sie mit einem DTS. (v) Und so weiter ...

    
Sai Ganesh 30.06.2009 20:06
quelle
1

Warum müssen Sie es im Dateisystem speichern? Kannst du das Bild einfach in Sitzung speichern? Wenn Sie eine Webfarm haben und keinen verteilten Sitzungscache oder einen permanenten (State Server, SQL Based oder etwas anderes) haben, kann ich verstehen, dass dies nicht funktioniert.

Die einfachste Möglichkeit, eine temporäre Datei zu bereinigen, besteht darin, dass Sie die Datei nicht erst erstellen müssen.

Nebenbei bemerkt, ich stehe derzeit vor einem similaren Problem, bei dem der Benutzer Dokumente während einer Sitzung hochladen kann und ich sie während eines Assistentenvorgangs speichern muss, aber dann, wenn der Assistent fertig ist, lösche sie. Klingt wie eine Lösung für temporäre Gegenstände würde mich auch

entsprechen

Bearbeiten

Warum exportieren Sie die Datei nicht, dann lesen Sie sie in den Speicher und speichern Sie sie in der Sitzung (ich nehme an, das sind kleine Bilder, die Sie aufpassen sollten, wenn der Benutzer viele große Bilder erzeugen kann)

    
JoshBerke 30.06.2009 19:48
quelle
1

Exportieren Sie in Datei mit einem eindeutigen Namen, lesen Sie es in die Sitzung und löschen Sie die Datei. Die Sitzungsdaten können immer wieder von einer Seite gestreamt werden, die das "Bild" aus den gespeicherten Bilddaten erzeugt.

Das wäre möglicherweise gut, wenn das Image "file" mehrmals vom Client gelesen wird, es gibt auch keine Bereinigung, da die Bereinigung unmittelbar nach dem Zurücklesen der Datei erfolgt.

    
Cade Roux 30.06.2009 19:54
quelle

Tags und Links