Gibt es eine Möglichkeit zu „Peek“ in einer Datei, während es den Upload über HTTP auf einem Windows-Box?

StackOverflow https://stackoverflow.com/questions/2479390

Frage

Ich brauche eine Datei-Upload-Funktion zu einer ASP.NET-Website hinzufügen und möchte in der Lage sein, einen kleinen Teil der Datei auf dem Server zu lesen, während es immer noch das Hochladen ist. Ein Blick oder Vorschautyp Funktion so I Inhalt bestimmen kann, und ein Feedback an den Benutzer geben, während es noch Upload ist (wir reden über große Dateien hier). Gibt es eine Möglichkeit, dies zu tun? Ich denke schlimmste Falle eine benutzerdefinierte Steuerung schreiben, die uploads nur eine feste Anzahl von Bytes der Datei einmal gewählt und dann unter der Decke beginnt eine weiteren Upload der vollständigen Datei. Nicht ganz sicher, auch das ist möglich, aber ich bin für eine elegantere Lösung sowieso ... Danke!

War es hilfreich?

Lösung

Es klingt wie Sie den „weißen Bildschirm des Todes“ bei großen Dateiuploads vermeiden wollen. Wenn ja, sollten Sie Telerik RadUpload Kontrolle , die bietet einen Fortschrittsbalken beim Upload.

Wenn Sie Ihre eigene Rolle wollen, würde ich ihre Testversion für Ideen dekompilieren. Ich habe an der Quelle auf diese Weise späht, und sie erreichen die Fortschrittsbalken durch eine Kombination aus einem benutzerdefinierten Httpmodule und Httphandler zusammen mit ihrer Kontrolle. Die Handler leitet die Datei in ein gestreamt Art und Weise, während das Modul „Prozent abgeschlossen“ Informationen liefert - oder umgekehrt; es ist schon ein paar Jahre her, seit ich es sah.

Edit:

  

Eigentlich versuche ich, die serverseitige Verarbeitung zu tun, da die Datei noch hochgeladen werden. Ich mag Import von Benutzerdaten über HTTP, sondern will die Benutzer mit Vorschau / Optionen präsentieren, wie wir ihre Daten verarbeiten werden, während die Datei noch das Hochladen (Spaltendefinitionen, etc.). Egal was passiert, wir die Datei nehmen werden wie es ist, so dass der Upload nicht unterbrochen werden muss. Da ich Interaktion während der einen relativ kleinen Teil der Datei auf das Lesen, wie es hochgeladen werden, würden Sie immer noch den gleichen Ansatz empfehlen?

Basis-Upload tatsächlich wollen

Nun ... würde es sehr schwierig sein, zu tun, und es könnte Cross-Browser nicht funktionieren, aber es könnte mit diesem Ansatz erfolgen.

Da es als Stream zur Arbeit mit der eingehenden Datei vollständig möglich ist, wie ich bereits erwähnt, könnten Sie Ihre intial Verarbeitung Update einigen Zustand als Teil dieser Stromverarbeitung haben. Wenn Sie nicht als Stream verarbeiten, müssen Sie für die vollständige Datei-Upload warten, bevor Sie etwas damit zu tun.

Das Problem ist folgende: während des Datei-Upload, Sie nicht mehr HTML-basierte Interaktion haben. Die Post muss weiterhin ungebrochen oder der Upload fehl. Die Steuerung ich nur verknüpft funktioniert überhaupt, weil die meisten Browser Javascript ermöglichen, weiterhin während der Post auszuführen und Update-Seite DOM.

Also, um diese Arbeit zu machen, müssen Sie während Ihrer Dateiverarbeitung in der Httpmodule einig standardisierte Zustand serverseitige aktualisieren, die zurück an den Client über XmlHttpRequest übertragen wird, Anrufe, die von den Httphandler behandelt. Sie müssen reine JavaScript / DOM verwenden, um die Benutzeroberfläche für den Benutzer zu aktualisieren.

Also, wie gesagt, es ist komplex und wahrscheinlich Buggy Cross-Browser zu sein, aber es theoretisch getan werden könnte.

Es gibt alernatives, die stabilen sein könnte, aber vielleicht nicht unbedingt machbar sein: Sie ein ActiveX-Steuerelement bauen könnten oder ein Click-Once .NET-Anwendung, dass vorge verarbeitet die Datei vor dem Hochladen, und vielleicht sogar überträgt asynchron die Datei während der Benutzer weiter surfen. Einige Benutzer können nicht wie die Option, und ich weiß nicht, die Einzelheiten der Bereitstellung Szenario, aber es ist eine Option.

Andere Tipps

Es gibt eine HTTP HEAD Methode aber nicht PEEK.

HEAD gibt Ihnen Informationen und Header über die Datei.

Natürlich können Sie einen speziellen Request-Handler machen, die alles tut, die Sie wollen. Sie haben nicht mit statischen Ressourcen zu arbeiten, können Sie eine Antwort dynamisch erstellen können, die Sie wollen.

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