バイナリ ファイルのアップロードを処理するためのディレクティブを作成しました。これを使用するプランカーは次のとおりです。
http://plnkr.co/edit/9qcKW5A6yq1hS8OuWTNK?p=preview
考え方は、現在のデータではなく現在のファイル名だけで (最初は) コントローラーによってモデルが初期化されるということです。
- ユーザーがリンクをクリックすると、データが自分のマシンにダウンロードされます。
- ユーザーが「-」ボタンをクリックすると、モデルのファイルデータ部分とファイル名部分の両方が未定義に設定されます。
- ユーザーが「+」をクリックして自分のファイルを選択すると、モデルは新しいファイル名と、問題のファイルのデータ (base64) を取得します。これを実行してブラウザのコンソールを見ると、Chrome と Firefox の両方で、許可されていないものへのアクセスに関して (Angular の腸から) 非常に奇妙なエラーが報告されていることがわかります。Firefox は、セキュリティについて具体的に述べています。
割り当てる代わりに、エラーが報告されないようにするには
model.filedata = values;
試す
model.filedata = '';
...そして確かに、エラーはなくなります。これは非常に奇妙です。ブラウザーは、「値」に含まれる base64 データの文字列について何らかの状態を維持しているようで、内部ウォッチャーで Angular がそれに触れることに問題があります。
これは私の側のバグですか、Angular 側のバグですか、それともブラウザ側のバグですか?
どんな助けでも大歓迎です。