AngularJS: マルチパートフォームでシンプルなファイルアップロードを実装するには? 質問する

AngularJS: マルチパートフォームでシンプルなファイルアップロードを実装するには? 質問する

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 で適切な「コンテンツ タイプ」を選択し、マルチパート データを処理するときに必要な境界を管理できるようになります。

おすすめ記事