angular.js - angular post的Content-Type被设置,导致不能上传图片,求助!!
漂亮男人
漂亮男人 2017-05-15 17:10:24
0
3
771

angular项目中由于某些原因设置了以下代码:

    // $locationProvider.html5Mode(true);

    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

    /**
     * The workhorse; converts an object to x-www-form-urlencoded serialization.
     * @param {Object} obj
     * @return {String}
     */
    var param = function (obj) {
      var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

      for (name in obj) {
        value = obj[name];

        if (value instanceof Array) {
          for (i = 0; i < value.length; ++i) {
            subValue = value[i];
            fullSubName = name + '[' + i + ']';
            innerObj = {};
            innerObj[fullSubName] = subValue;
            query += param(innerObj) + '&';
          }
        }
        else if (value instanceof Object) {
          for (subName in value) {
            subValue = value[subName];
            fullSubName = name + '[' + subName + ']';
            innerObj = {};
            innerObj[fullSubName] = subValue;
            query += param(innerObj) + '&';
          }
        }
        else if (value !== undefined && value !== null)
          query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
      }

      return query.length ? query.substr(0, query.length - 1) : query;
    };

    // Override $http service's default transformRequest
    $httpProvider.defaults.transformRequest = [function (data) {
      return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
    }];

结果导致现在文件不能上传,最简单的一个form表单提交都不行:

  <form action="upload/url" name="form1" method="post" enctype="multipart/form-data">
    <input id="file" name="file" type="file" accept="image/*">
    <button type="submit" class="btn btn-primary btn-lg">提交</button>
  </form>

向各位大神求助,怎么样能正常上传图片?急,很急啊,项目都已经延期一天了……谢谢!

漂亮男人
漂亮男人

全員に返信(3)
漂亮男人

https://github.com/nervgh/ang... どういたしまして

リーリー リーリー リーリー

いいねを押す +0
淡淡烟草味

被験者は 2 つの質問をしました: 1. ヘッダー設定はなぜ行われたのですか? 2. 写真のアップロード方法

1. ヘッダー設定をベースレベルの httpProvider に追加した理由は何ですか?

http://stackoverflow.com/ques...

企業のプログラマーはこの質問を参照してください。あなたの会社のバックエンド API インタラクションは Content-Type: x-www-form-urlencoded を使用し、angular は Content-type: application/json を使用するため、Content-type とシリアル化が変更されました。 被験者はそれを参照できます。

2. 写真をアップロードする

この投稿がどのように開始されたかについては、対象者の説明があまり明確ではありません。しかし、問題は、送信されたファイルのコンテンツ タイプが正しく設定されていないことにあります。 FormData を使用して送信する方法を提供します:
リーリー

いいねを押す +0
给我你的怀抱

js コードの一部は、データを x-www-form-urlencoded フォームにエンコードすることです。しかし、HTML にはデータ バインディングがありません。これは絶対に不可能です。したがって、angularjs の使用法をまったく理解していないのではないかと思います。
また、データをどのように投稿したかを明確に説明していませんでした。問題がどこにあるのか誰にも分かりません。

完全なコードを投稿してから戻ってください

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート