2017-07-17 4 views
-1

Ich lade eine Datei unter Servlet hoch, führe die erforderlichen Operationen für diese Datei durch und lade dann diese verarbeitete Datei auf den Client herunter.So verhindern Sie, dass mehrere Benutzer auf dieselbe Datei zugreifen

Ich habe zwei Formen multipart/form-data. Der erste verwendet die post-Methode, um Dateien hochzuladen. Der zweite verwendet die Methode get, um die Datei herunterzuladen.

DoPost() -> Der Benutzer wählt die Datei aus und lädt sie hoch. Diese Datei wird am angegebenen Speicherort verarbeitet und gespeichert. Und diese Datei wird als globale Variable vom Typ File gehalten.

DoGet() -> Herunterladen der globalen File.

Wenn ein Benutzer eine Datei vom Webbrowser lädt, kann ein anderer Benutzer sie von einem anderen Webbrowser herunterladen. Ich nehme an, dies könnte der Grund dafür sein, dass File global ist. Ich versuchte ThreadLocal, aber es hat nicht funktioniert, weil doPost und doGet nicht im selben Thread sind.

Gibt es eine Möglichkeit, die Sie vorschlagen können?

+0

Um zu verdeutlichen, bin ich richtig, dass Sie möchten, dass die Datei nur für den Uploader verfügbar ist? – MartinByers

+0

Ja, nur der Uploader. – cezaalp

+0

Ihre Frage betrifft nicht mehrere Threads. Es geht um mehrere * Benutzer. * – EJP

Antwort

0

Wenn der Benutzer die Datei in derselben Sitzung hochlädt und herunterlädt, können Sie den Dateinamen während des POST-Vorgangs in HttpSession speichern. Während des GET überprüfen Sie das Vorhandensein in HttpSession. Lassen Sie den Benutzer die Datei nur herunterladen, wenn sie in HttpSession vorhanden ist.

Wenn der Benutzer die Datei hochgeladen, dann ausgeloggt und wieder eingeloggt sein und die Datei herunterladen könnte, müssen Sie die Dateiinformationen in einem Persistenzspeicher wie einer Datenbank speichern.

0

Sie sind richtig, jede Anfrage ist ein anderer Thread, aber sie sollten mit der gleichen Sitzung verknüpft werden.Store Ihre Datei in der Sitzung und alle werden sortiert.

Verwandte Themen