Зачем использовать службу загрузки ng-file-upload

Почему я должен использовать службу загрузки с ng-file-upload, как это

Upload.upload({
    url: '/postMyFormHere',
    data:   {
        fileToUpload: model.file,
        someField1: model.field1,
        someField2: model.field2,
    }
})

и не может просто сделать

  $http({
        method: 'post',
        headers: {
            'content-type': 'multipart/form-data'},
        url: '/postMyFormHere',
        data: {
            fileToUpload: model.file,
            someField1: model.field1,
            someField2: model.field2,
            }
    })

Я думал, что ng-file-upload просто позволяет привязывать файлы из входных файлов к модели. Разве Angular не может изначально выполнять POST-запрос multipart/form-data?

Изменить:

Я пытался заставить свою публикацию из нескольких частей работать через $http. Я изменил заголовок на:

"multipart/form-data; boundary=----WebKitFormBoundarypEvyJj8BAuq4lk7T"

Но я получаю эту ошибку на своем экспресс-сервере

Error: Multipart: Boundary not found

Я предполагаю, что весь смысл службы загрузки заключается в том, что она анализирует полезную нагрузку POST с границей из нескольких частей, верно?


person Lev    schedule 04.10.2016    source источник
comment
Код доступен на github.com и имеет довольно хорошую документацию...   -  person Heretic Monkey    schedule 05.10.2016
comment
Вам нужно отправить свои данные как объект FormData и установить для Content-Type значение identity. Вы можете просмотреть код Upload.upload() и посмотреть, как он отправляется. В основном он заботится о типе контента, создании данных формы, разрешении возобновляемой загрузки, включении события прогресса, разрешении прерывания загрузки abort(), переименовании файла и некоторых других функциях.   -  person danial    schedule 05.10.2016
comment
И, как упомянул Микки, он позволяет загружать файлы для IE8-9 с использованием прокладки Flash и FileAPI.   -  person danial    schedule 05.10.2016
comment
очень полезно Майк   -  person Lev    schedule 05.10.2016


Ответы (1)


Вы абсолютно можете, цель всех модулей, созданных для обработки загрузки файлов, - поддержка браузера. IE10+ поддерживает только FormData() объект. Итак, если вам нужно поддерживать старые браузеры, вам нужно решить эту проблему, используя стратегию <iframe>, или просто использовать существующие библиотеки, которые в основном делают то же самое.

ОБНОВЛЕНИЕ

var fd = new FormData();
fd.append('file', model.file);
$http.post(uploadUrl, fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined}
})

Попробуйте так!

person Mikki Kobvel    schedule 04.10.2016
comment
Отредактировал мой пост. - person Lev; 04.10.2016
comment
Обновил мой ответ, надеюсь, он вам поможет! - person Mikki Kobvel; 05.10.2016