AngularJS から node.js サーバーに単純なマルチパート フォームを投稿したいのですが、フォームの 1 つの部分には JSON オブジェクトが含まれ、もう 1 つの部分には画像が含まれている必要があります (現在は $resource を使用して JSON オブジェクトのみを投稿しています)
まず input type="file" から始めるべきだと考えましたが、AngularJS はそれにバインドできないことがわかりました。
私が見つけた例はすべて、ドラッグ アンド ドロップ用の jQuery プラグインをラップするためのものです。 1 つのファイルを単純にアップロードしたいのです。
私は AngularJS の初心者で、独自のディレクティブを記述することに全く自信がありません。
ベストアンサー1
AngularJS 以外の依存関係のない実際に機能するソリューション (v.1.0.6 でテスト済み)
html
<input type="file" name="file" onchange="angular.element(this).scope().uploadFile(this.files)"/>
Angularjs (1.0.6) はサポートされていませんngモデル「入力ファイル」タグでは、ユーザーから選択されたすべての(最終的に)ファイルを渡す「ネイティブな方法」で実行する必要があります。
コントローラ
$scope.uploadFile = function(files) {
var fd = new FormData();
//Take the first selected file
fd.append("file", files[0]);
$http.post(uploadUrl, fd, {
withCredentials: true,
headers: {'Content-Type': undefined },
transformRequest: angular.identity
}).success( ...all right!... ).error( ..damn!... );
};
すごいのは未定義コンテンツタイプと変換リクエスト: angular.identityこれにより、$http で適切な「コンテンツ タイプ」を選択し、マルチパート データを処理するときに必要な境界を管理できるようになります。