Alternative zum Sperren des Dateityps in FileReference.save () AS3

8

Aktualisierung:

Wie in der Antwort von Jacob unten beschrieben, ist eine Einschränkung oder Korrektur des Verhaltens von FileReference.save nicht möglich. Kann jemand eine Alternative vorschlagen (Server ist Apache / PHP), die alle meine Kriterien von diesem Beitrag erfüllt und die Fallstricke vermeidet, die ich mit Jacob diskutierte?

Bearbeiten beenden

Ich speichere ein Bild von meiner AS3-Anwendung mit FileReference.save (). Dies ist der Code, der gut funktioniert:

%Vor%

Dies öffnet den Dialog zum Speichern der Datei wie erwartet. Ich benutze dies, anstatt die byteData an PHP zu senden, weil ich möchte, dass der Benutzer ein vertrautes Dialogfeld hat, in dem er seinen eigenen Dateinamen festlegen kann.

Das Problem tritt auf, wenn Benutzer ihr Betriebssystem so konfiguriert haben, dass sie Dateierweiterungen anzeigen, wie ich es tue. Das bedeutet, dass der Dateiname im Speichern-Dialog die Erweiterung enthält, wie in der Abbildung unten zu sehen ist, und es dem Benutzer sehr leicht fällt, diese Erweiterung zu löschen, wenn sie die Datei umbenennt. Da der Standarddateityp für dieses Feld 'Alle Dateien' ist, wird die Datei ohne Typ gespeichert, wenn die Erweiterung gelöscht wird.

Ich kenne keine Möglichkeit, einen Dateityp im Speicherdialog zu erzwingen (wenn es einen gibt, der meine bevorzugte Route sein würde), so kann jemand einen sicheren Weg für mich vorschlagen, dies zu tun, was immer noch erlaubt Benutzer, um den Dateinamen selbst unter Verwendung eines Standarddialogs für ihr OS zu setzen?

Ich habe versucht, FileReference.browse () vor dem save () aufzurufen, wie in dieses Tutorial , aber das wirft einen Fehler auf, weil Sie nur einen FileReference-Aufruf gleichzeitig ausführen können.

    
shanethehat 30.06.2011, 17:54
quelle

8 Antworten

4

Entschuldigung, das ist ein bekannter großer Flash-Player-Bug ohne wirkliche Abhilfe.

Stimmen Sie hier ab: Ссылка

(Obwohl Adobe dies aus irgendeinem Grund als Feature-Anfrage bezeichnet.)

Bearbeiten Sie 2:

Behoben für FP 11.8 für Chrome, sowohl unter Mac OS als auch unter Windows.

Ссылка

Bearbeiten: Hinzufügen von navigateTo Informationen zur Problemumgehung

Es gibt die PHP-Option, eine navigateTo() zu machen: die Datei auf eine PHP-Seite mit einem MIME-Type von image/jpeg hochladen Wenn Sie die richtigen Header angeben, können Sie den Browser dazu bringen, den nativen Browser aufzurufen Speichern Sie den Dialog, der Erweiterungen verwaltet. Es gibt jedoch andere Nachteile dieser Methode:

  • keine Fehlerbehandlung innerhalb von flex
  • zusätzliche Anfrage Zeit
  • zusätzliche Serverlast.
  • Keine Rückmeldung an den Benutzer, während die Datei hochgeladen und erneut heruntergeladen wird.
  • Inkonsistente Benutzererfahrung in verschiedenen Browsern / Betriebssystemen.
    • einige Browser werden tatsächlich ein neues Fenster öffnen, das verschwindet
    • einige werden das Fenster verlassen.
    • einige werden überhaupt kein neues Fenster haben.
Jacob Eggers 30.06.2011, 17:59
quelle
2

Nach langen Diskussionen und angesichts unserer Benutzerbasis ist unsere Lösung:

  1. erkennen, wenn das Problem auftritt: Überprüfen Sie im FileReference SELECT-Ereignis-Listener, ob der Benutzer den Dateinamen geändert hat und die Erweiterung gelöscht wurde.
  2. Wenn das Problem aufgetreten ist, brechen Sie den Vorgang ab. Starten Sie die Operation erneut mit der 'server bounce' Methode mit navigateToURL ()

Wir haben festgestellt, dass der Benutzer den Namen meistens nicht geändert hat, so dass wir selten auf die zweite Methode zurückgreifen müssen, was weniger wünschenswert ist.

Beachten Sie, dass wir, um die zuvor erwähnten navigatorURL () - Browser-Inkonsistenzprobleme zu verringern, es nützlich fanden, "Content-disposition: attachment" in dem vom Server zurückgegebenen Header anzugeben.

    
Chris 24.01.2012 09:38
quelle
1

Schade, dass dies nicht verfügbar ist. Ich kann verstehen, dass Benutzer die Möglichkeit haben, die Dateien so zu speichern, wie sie es wollen. Was aber, wenn Sie vergessen, die Erweiterung hinzuzufügen? Nach meiner Erfahrung speichert Flex dann die Datei als eine normale Datei ohne eine Erweiterung. Dadurch wissen einige Benutzer möglicherweise nicht, was sie mit der Datei tun sollen, die sie gespeichert haben. Da nicht jeder Benutzer weiß, was die verschiedenen Erweiterungen bedeuten / sind und hoffe, Dateien mit falschen Erweiterungen zu öffnen. Ich habe es oft ruhig gesehen, dass Leute hoffen, eine spezifische Datei mit einer seltsamen Erweiterung oder keiner Erweiterung zu öffnen.

Ich verstehe teilweise, warum Adobe es eher als Feature-Anfrage denn als Bug ansieht. Aber wenn Sie sehen, wie es den Prozess der Dinge durcheinander bringt, möchten Sie es vielleicht eher als einen Fehler betrachten. Wie ich schon sagte, nicht jeder Benutzer wird wissen, wie man die Datei "myfile" anstelle von "myfile.jpg" öffnet. Und wie viele Benutzer, die verstehen, wie man sie öffnet, haben ".cow" als eine Erweiterung festgelegt, die vom Imageviewer geöffnet werden soll, und wie wird das Betriebssystem auf diese seltsame Erweiterung reagieren? Nun, vielleicht ist ".cow" ein schlechtes Beispiel, aber ich schätze, Sie verstehen das.

Ein Workaround dafür könnte sein, die Funktion selbst zu erstellen. Das heißt, Sie geben dem Benutzer ein Popup-Fenster (oder wie Sie es bevorzugen) mit der Option, den Dateinamen anzugeben, den Speicherort der Datei zu erhalten und dann die Schaltfläche Speichern / Abbrechen. Sie können dann überprüfen, ob sie eine Erweiterung hinzugefügt, einen Dateinamen eingegeben und eine Dateiposition angegeben haben (das ist sogar richtig). Dies kombiniert mit der FileStream-Funktion sollte (falls ich mich nicht irre) eine Lösung sein, um eine ähnliche Funktion wie die Speicherdialogoption zu erstellen.

    
Roel 11.08.2011 10:47
quelle
1

Eduard stellte eine Problemumgehung in Adobes Feature-Request-Tracker für dieses Problem zur Verfügung: Verdoppelung der Dateierweiterung, z. B. "image.jpg.jpg". Das werden wir tun, denn für unsere Benutzer, die Erweiterungen ausblenden, werden die Erweiterungen gelöscht, unabhängig davon, ob sie den Dateinamen ändern oder nicht.

    
undefined 09.07.2012 21:39
quelle
0

Die Antwort ist ... du nicht. Das ist nicht nur ein Teil von FileReference (oder File, das ist Adobe Air), es ist auch nicht unser Anliegen. Wenn ein Benutzer alle Dateien als .cow speichern möchte, lass ihn! Vielleicht hat er seine Maschine so konfiguriert, dass .cow als JPEG geöffnet wird.

Ehrlich gesagt stört es mich als Benutzer wirklich, wenn jemand glaubt, dass er das Recht hat, mir zu sagen, was ich auf meinem Rechner Dateien nennen werde.

    
cwallenpoole 30.06.2011 18:00
quelle
0

Ich weiß, dass es schon eine Weile her ist, seit das gepostet wurde, aber ... Unter Bezugnahme auf das Amoeba.co-Tutorial können Sie dies tun (das Beispiel ist für PNG-Bilder):

%Vor%
  • Neutral
Neutral 27.09.2011 14:01
quelle
0

Es gibt keine echte Arbeitsumgebung für diese Lösung, da sie sich auf eine Standardeinstellung in Windows bezieht. Microsoft entschied, dass Personen die Erweiterungsnamen nicht kennen müssen und erstellte daher eine Einstellung, die Dateierweiterungstypen bekannter Dateitypen verbirgt. Um dies zu beheben, muss der Benutzer diese Einstellung bereinigen, indem er die hier gezeigten Schritte ausführt.

Ссылка

    
Vivek Khurana 26.08.2013 06:02
quelle
-1
%Vor%

Ihr Problem ist gelöst.

    
Alpesh Bapna 29.12.2015 10:43
quelle