Frage

Ich habe ein Szenario, in dem Benutzer meiner ASP.NET Web-Anwendung Zeugnisse Informationen und Bilder aus Text vorzulegen. Das einreichen Verfahren hat die folgenden Schritte:

  • ersten Eingänge der Benutzer den Inhalt und wählt einen Pfad zu einem Bild
  • Wenn er Vorschau klickt, wird die Info noch einmal gezeigt, so dass er bestätigen kann,
  • bestätigt Sobald die Informationen in der Datenbank beibehalten werden

Das Problem dabei ist, dass ich hochgeladene Bilder in der DB speichern möchten nicht, bevor der Benutzer tatsächlich bestätigt. Stattdessen speichere ich sie als temporäre Dateien und steckte sie in DB erst nach der endgültigen Bestätigung.

Da ich meine Anwendung auch in mittlerer Vertrauenswürdigkeit ausgeführt werden soll, habe ich Schreibrechte nur für das Anwendungsverzeichnis und nirgendwo außerhalb. Ich möchte auch Schreibberechtigungen für das ASPNET / NETWORK SERVICE Benutzer auf die ~ / Ordner App_Data begrenzen. Das Problem mit meinem Szenario ist, dass sobald eine temporäre Datei in diesem Ordner erstellt wird, wird der Anwendungspool recycelt und ich will nicht, dass auf jedem Zeugnis vorlegen.

Wie beraten Sie mir diese temporären Dateien zu halten, statt? Der Pool ist nicht neu gestartet, wenn ich eine Datei aktualisieren - nur auf erstellen oder umbenennen. Aber ich glaube nicht, dass ich ganze Bilder in einer einzigen Datei für alle Benutzer speichern kann. Was denken Sie?

UPDATE : Ich sollte anmerken, dass ich eine Fremdüberwachung für den Upload bin mit. Es gibt mir programmatischen Zugriff auf den binären Strom des Dateiinhaltes nach dem Hochladen, aber ich kann das nicht halte nach einem zweiten Postbacks (den ersten Schritt und Postbacks tatsächlich funktioniert die Upload).

War es hilfreich?

Lösung

Ich würde empfehlen, IsolatedStorage . Es ist eine Art virtuellen Ordners.

Hier ist ein Auszug aus ein Beispiel auf Codeproject :

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();

UPDATE : Um Ihre Datei einfach tun dies aufzuräumen:

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}

Andere Tipps

Die Standard web_mediumtrust.config Datei, die Microsoft Schiffe ist bekanntlich nicht praktikabel.

Hier ist ein Ausschnitt aus der Standard-web_mediumtrust.config Datei. Standardmäßig können Sie nicht System.IO verwenden, um den temporären Ordner zu entdecken oder zu schreiben.

                        <IPermission
                                class="FileIOPermission"
                                version="1"
                                Read="$AppDir$"
                                Write="$AppDir$"
                                Append="$AppDir$"
                                PathDiscovery="$AppDir$"
                        />

Obwohl ich nicht mit Isolated Storage experirement haben wie @Seb erwähnt, scheint es von der Standard-Konfigurationsdatei erlaubt zu werden.

Sie können immer noch die normalen Path.GetTempFilename () -Methode eine temporäre Datei in ASP.NET-Szenarien zu erhalten.

Es sollte eine temporäre Datei Pfad geben, die von NETWORK_SERVICE beschreibbar ist, sondern auch lebt in einem der temporären Ordner tatsächlichen Windows nicht Ihre Bewerbungsmappe.

Wenn Ihr Host konfiguriert sein Server korrekt, sollte das funktioniert gut.

Dies ist eine Antwort auf leppie, die auf meine Frage kommentiert (die char Grenze zu vermeiden)

Von: http://blogs.msdn.com/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

  

... manchmal Ihre Anwendungspool aus unerklärlichen Gründen ohne ersichtlichen Grund rezykliert. Dies ist normalerweise ein Konfigurationsproblem oder aufgrund der Tatsache, dass Sie Dateisystemoperationen im Anwendungsverzeichnis gerade ausführen.

Sind Sie sicher, es soll nicht recyceln?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top