ng-file-upload + отправка нескольких пустых массивов файлов на сервер (паруса)

Я пытаюсь отправить несколько файлов на свой парусный сервер с помощью ng-file-upload. Я использую пример веб-страницы ng-file-upload, и он не работает.

Проблема:

Я получаю на сервере пустой массив.

Факты:

Я использую Chrome, и он поддерживает загрузку нескольких файлов html5.

Я протестировал сервер с помощью почтальона, и он сработал, при этом проблема с клиентом.

Я могу console.log файлы на клиенте.

Вот код js:

$scope.onFileSelect = function (files) {
         if (!($scope.updateAssetForm.OSGImages)) {
             console.log($scope.updateAsset.OSGImages.$valid);
             console.log($scope.updateAssetForm.OSGImages);
             return;
         }
        console.log($scope.updateAssetForm.OSGImages);
        var test = [];
        for (var i = 0; i < $scope.updateAssetForm.OSGImages.length; i++) {
            test.push($scope.updateAssetForm.OSGImages[i])
        }
        console.log(test);


                Upload.upload({
                    url: '/api/updateAsset',
                    data: {
                         osgFile: test,
                        'assetId': 5,
                        'loadValueType' : 4,
                    }
                })


    },

Вот HTML-код:

<div class = "control-group form-group col-md-12"
    ng-class = "{'has-error':updateAsset.OSGImages.$invalid && updateAsset.OSGImages.$dirty}" ng-if = "showUploadFile(4)">
      <button ngf-select="onFileSelect(updateAssetForm.OSGImages)" ng-model="updateAssetForm.OSGImages" ngf-multiple="true">
      OSG Images (optional) (max 3 MB) 
      </div>
      <p ng-repeat="image in updateAssetForm.OSGImages">
        {{image.name}}
      </p>
      <span class = "help-block has-error" ng-if="updateAsset.OSGImages.$dirty">
      </span>
    </div>

Журнал вкладки "Сеть"

Принять: application / json, text / plain, / Content-Type: multipart / form-data; border = ---- WebKitFormBoundaryhfBw31xYfdWDtTlU Источник: http://localhost:1337 Ссылка: http://localhost:1337/editproject Пользовательский агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 48.0.2564.116 Safari / 537.36

------ WebKitFormBoundaryhfBw31xYfdWDtTlU Content-Disposition: form-data; name = "osgFile [0]"; filename = "p51d-jw-03.png" Content-Type: image / png

------ WebKitFormBoundaryhfBw31xYfdWDtTlU Content-Disposition: form-data; name = "osgFile [1]"; filename = "p51d-jw-02.png" Content-Type: image / png

------ WebKitFormBoundaryhfBw31xYfdWDtTlU Content-Disposition: form-data; name = "osgFile [2]"; filename = "p51d-jw-01.png" Content-Type: image / png

------ WebKitFormBoundaryhfBw31xYfdWDtTlU Content-Disposition: form-data; name = "assetId"

5 ------ WebKitFormBoundaryhfBw31xYfdWDtTlU Content-Disposition: form-data; name = "loadValueType"

4 ------ WebKitFormBoundaryhfBw31xYfdWDtTlU--

Что я делаю не так?


person Sebastián Coronado Alvarado    schedule 03.03.2016    source источник
comment
Документация ссылается на $files, когда вы вызываете свою функцию. Вы пробовали передавать $files вместо updateAssetForm.OSGImages в onFileSelect()?   -  person jcc    schedule 03.03.2016
comment
Документация ссылается на $ files, потому что в ней используется ng-model = files. Я использую ng-model = updateAssetForm.OSGImages   -  person Sebastián Coronado Alvarado    schedule 04.03.2016
comment
как выглядит ваш запрос на вкладке сети?   -  person danial    schedule 04.03.2016
comment
- ›отредактировал исходное сообщение   -  person Sebastián Coronado Alvarado    schedule 04.03.2016
comment
Их отправляют. На вкладке сети не отображается двоичное содержимое файла, но оно есть.   -  person danial    schedule 05.03.2016
comment
тогда почему сервер получает пустой массив?   -  person Sebastián Coronado Alvarado    schedule 05.03.2016
comment
Нашел проблему. Ответ ниже   -  person Sebastián Coronado Alvarado    schedule 05.03.2016


Ответы (2)


Добавьте поле arrayKey: '' в функцию загрузки

    Upload.upload({
        url: '/api/updateAsset',          
        arrayKey: '',
        data: {
                osgFile: test,
                'assetId': 5,
                'loadValueType' : 4,
              },
        method: "PUT"
      })

Он будет следить за тем, чтобы массив файлов был получен с "fieldName" вместо "fieldName [0]"

person NIJESH ku    schedule 09.05.2017

Нашел "проблему":

ng-file-upload изменяет «имя» (поля) на «имя [0]», «имя [1]», «имя [n]» ... Я пытался получить весь массив на сервере с «именем».

Причина, по которой я пытался получить весь массив с «именем», заключается в том, что, когда я отправляю массив с почтальоном, он получает весь массив, используя только «имя».

Решение, позволяющее избежать проблемы с массивом при загрузке нескольких файлов с помощью sails + ng-file-upload, находится здесь: https://github.com/balderdashy/skipper/issues/67

Лучший.

person Sebastián Coronado Alvarado    schedule 05.03.2016