1

バイナリ ファイルのアップロードを処理するためのディレクティブを作成しました。これを使用するプランカーは次のとおりです。

http://plnkr.co/edit/9qcKW5A6yq1hS8OuWTNK?p=preview

考え方は、現在のデータではなく現在のファイル名だけで (最初は) コントローラーによってモデルが初期化されるということです。

  • ユーザーがリンクをクリックすると、データが自分のマシンにダウンロードされます。
  • ユーザーが「-」ボタンをクリックすると、モデルのファイルデータ部分とファイル名部分の両方が未定義に設定されます。
  • ユーザーが「+」をクリックして自分のファイルを選択すると、モデルは新しいファイル名と、問題のファイルのデータ (base64) を取得します。これを実行してブラウザのコンソールを見ると、Chrome と Firefox の両方で、許可されていないものへのアクセスに関して (Angular の腸から) 非常に奇妙なエラーが報告されていることがわかります。Firefox は、セキュリティについて具体的に述べています。

割り当てる代わりに、エラーが報告されないようにするには

model.filedata = values;

試す

model.filedata = '';

...そして確かに、エラーはなくなります。これは非常に奇妙です。ブラウザーは、「値」に含まれる base64 データの文字列について何らかの状態を維持しているようで、内部ウォッチャーで Angular がそれに触れることに問題があります。

これは私の側のバグですか、Angular 側のバグですか、それともブラウザ側のバグですか?

どんな助けでも大歓迎です。

4

2 に答える 2

0

バグではありません。

問題は、モデルをファイル入力にバインドすることです。( data-ng-model="model.filedata")

これは、Angular がファイル入力の値を変更すると、filedata.

また、セキュリティ上の理由から、ファイル入力の値をプログラムで設定できるブラウザーはありません。
(それ以外の場合は、パスワードを使用してシステム上のローカル ファイルへのパスを設定し、サーバーへのアップロードを強制することができます)

バインディングを削除するだけで、期待どおりに動作します ( demo )

(そして、おそらく同じ例外を生成しますが、 ではmodel.filenameなくmodel.filedataにバインドするつもりでした.. )

于 2013-10-09T13:00:19.600 に答える