8

アップデート:

以下の Jacob の返信で説明されているように、FileReference.save の動作を制限または修正することはできません。この投稿のすべての基準に一致し、ジェイコブと話し合った落とし穴を回避する代替案 (サーバーは Apache/PHP) を誰か提案できますか?

編集を終了

FileReference.save() を使用して AS3 アプリから画像を保存しています。これは正常に動作するコードです:

var encoder:JPGEncoder = new JPGEncoder(80);
var byteData = encoder.encode(myBMD);  //bitmap data object created earlier
var file:FileReference = new FileReference();
file.save(byteData, "myImage.jpg");

これにより、期待どおりにファイルの保存ダイアログが開きます。byteData を PHP に送信するのではなく、これを使用しています。これは、ユーザーが独自のファイル名を設定できる使い慣れたダイアログ ボックスをユーザーに表示してもらいたいためです。

問題は、ユーザーが自分のオペレーティング システムでファイル拡張子を表示するように構成している場合に発生します。私のようにです。つまり、保存ダイアログでは、下の画像に示すようにファイル名に拡張子が含まれているため、ユーザーはファイルの名前を変更するときにその拡張子を簡単に削除できます。このボックスのデフォルトのファイル タイプは「すべてのファイル」であるため、拡張子を削除すると、ファイルはタイプなしで保存されます。

保存ダイアログでファイルタイプを強制する方法を知らないので(私の優先ルートとなるものがある場合)、失敗しても、ユーザーが設定できる安全な方法を誰かが提案できますOSの標準ダイアログを使用してファイル名自体を?

このチュートリアルに示すように、save() の前に FileReference.browse() への呼び出しを挿入しようとしましたが、一度に 1 つの FileReference 呼び出ししか実行できないため、エラーがスローされます。

ファイル保存ダイアログ

4

8 に答える 8

4

申し訳ありませんが、これは既知の主要なFlash Playerのバグであり、実際の回避策はありません。

ここで投票してください:https ://bugs.adobe.com/jira/browse/FP-2014

(何らかの理由で、Adobeはこれを機能要求と呼んでいます。)


編集2:

MacOSとWindowsの両方でのChrome用FP11.8で修正されました。

https://bugbase.adobe.com/index.cfm?event=bug&id=2898055


編集:navigateTo回避策情報の追加

実行するphpオプションがありますnavigateTo():mimeタイプのphpページにファイルを投稿するimage/jpeg正しいヘッダーを指定すると、ブラウザーに拡張機能を維持するブラウザーのネイティブ保存ダイアログを表示させることができます。ただし、その方法には他にも欠点があります。

  • フレックス内からのエラー処理なし
  • 追加のリクエスト時間
  • 追加のサーバー負荷。
  • ファイルがアップロードおよび再ダウンロードされている間、ユーザーへのフィードバックはありません。
  • ブラウザ/OS間で一貫性のないユーザーエクスペリエンス。
    • 一部のブラウザは、実際には消える新しいウィンドウをポップアップします
    • 一部はウィンドウを離れます。
    • 新しいウィンドウがまったくないものもあります。
于 2011-06-30T17:59:25.127 に答える
1

Eduardは、この問題に対するAdobeの機能リクエストトラッカーの回避策を提供しました。「image.jpg.jpg」などのファイル拡張子を2倍にします。拡張機能を非表示にするユーザーの場合、ファイル名を変更するかどうかに関係なく拡張機能が削除されるため、これを実行します。

于 2012-07-09T21:39:31.603 に答える
1

これが利用できないのは残念です。ユーザーがファイルを自由に保存できるようにする必要があることは理解できます。しかし、拡張機能を追加するのを忘れたらどうしますか? 私の経験では、Flex はファイルを拡張子なしの通常のファイルとして保存します。そうすることで、一部のユーザーは、保存したファイルをどうすればよいかわからなくなる可能性があります。すべてのユーザーがさまざまな拡張子の意味を理解しているわけではなく、間違った拡張子のファイルを開くことを望んでいます。奇妙な拡張子を持つ特定のファイル、または拡張子がまったくない特定のファイルを開くことを希望する人がいるのを、私はよく静かに見てきました。

アドビがこれをバグではなく機能要求と見なしている理由の一部は理解できます。しかし、それが物事のプロセスをどのように台無しにするかを見ると、むしろそれをバグと見なしたいと思うかもしれません. 私が言ったように、すべてのユーザーが「myfile.jpg」ではなく「myfile」という名前のファイルを開く方法を知っているわけではありません。そして、それを開く方法を理解しているユーザーのうち、イメージビューアーで開く拡張子として「.cow」を設定したユーザーがどれほどいるでしょうか。OS は、このような奇妙な拡張子にどのように応答するでしょうか。「.cow」は悪い例かもしれませんが、要点は理解できたと思います。

これを回避するには、自分で関数を作成することです。ファイル名を指定し、ファイルの場所を取得してから保存/キャンセルボタンを選択するオプションを使用して、ユーザーにポップアップウィンドウ(または好みの方法)を提供することを意味します。次に、拡張子を追加したかどうか、ファイル名を入力したかどうか、ファイルの場所を指定したかどうかを確認できます (これは正しいことでもあります)。これを FileStream 関数と組み合わせると、保存ダイアログ オプションと同様の関数を作成するためのソリューションになるはずです (私が間違っていなければ)。

于 2011-08-11T10:47:26.997 に答える
0

答えは...あなたはしません。それはFileReference(またはAdobe AirであるFile)の一部ではないだけでなく、私たちの関心事でもありません。ユーザーがすべてのファイルを.cowとして保存したい場合は、ユーザーに許可してください。おそらく彼は、.cowがjpegとして開かれるようにマシンを構成しました。

正直なところ、ユーザーとして、自分のマシン上のファイルに名前を付ける権利があると誰かが信じていると、本当に気になります。

于 2011-06-30T18:00:44.333 に答える
0

これが投稿されてからしばらく経っていることは知っていますが... Amoeba.co のチュートリアルを参照すると、次のことができます (例は PNG 画像用です)。

files = new FileReference();
files.browse(new Array(new FileFilter("Image (*.png)", "*.png")));
files.cancel(); // Important
files.save(/* Your Data Here */);
  • 中性
于 2011-09-27T14:01:03.810 に答える
-1
file.save(byteData, "myImage.jpg"+Math.floor((Math.random())*100)+".jpg");

あなたの問題は解決しました。

于 2015-12-29T10:43:41.587 に答える