Я хочу сделать простую составную публикацию формы из AngularJS на сервер node.js, форма должна содержать объект JSON в одной части и изображение в другой части (в настоящее время я публикую только объект JSON с $ resource)
Я решил начать с ввода type = "file", но потом обнаружил, что AngularJS не может с этим связаться ...
Все примеры, которые я могу найти, предназначены для переноса плагинов jQuery для drag & drop. Я хочу простую загрузку одного файла.
Я новичок в AngularJS и совсем не чувствую себя комфортно при написании своих собственных директив.
angularjs
angularjs-fileupload
Гал Бен-Хаим
источник
источник
Ответы:
Реально работающее решение без каких-либо зависимостей, кроме angularjs (протестировано с v.1.0.6)
HTML
Angularjs (1.0.6) не поддерживает ng-модель для тегов «input-file», поэтому вы должны сделать это «родным способом», который передает все (в конечном итоге) выбранные файлы от пользователя.
контроллер
Крутой частью является неопределенный тип контента и transformRequest: angular.identity, которые дают $ http возможность выбрать правильный «тип контента» и управлять границей, необходимой при обработке многокомпонентных данных.
источник
fd.append("file", files[0]); fd.append("file",files[1]); fd.append("name", "MyName")
Вы можете использовать простую / облегченную директиву ng-file-upload . Он поддерживает перетаскивание, прогресс файла и загрузку файлов для браузеров, отличных от HTML5, с помощью FlashAP-приложения FileAPI
JS:
источник
Более эффективно отправить файл напрямую.
Кодирование base64 из
Content-Type: multipart/form-data
добавляет дополнительные накладные расходы на 33%. Если сервер поддерживает это, более эффективно отправлять файлы напрямую:При отправке POST с объектом File важно установить
'Content-Type': undefined
. Затем метод отправки XHR обнаружит объект File и автоматически установит тип содержимого.Чтобы отправить несколько файлов, см. « Выполнение нескольких
$http.post
запросов напрямую из списка файлов».<input type=file>
Элемент не по умолчанию работа с директивой нг-модели . Требуется специальная директива :Рабочая демонстрация директивы "select-ng-files", которая работает с
ng-model
1$http.post
с типом контентаmultipart/form-data
Если нужно отправить
multipart/form-data
:При отправке POST с API FormData важно установить
'Content-Type': undefined
. Затем метод отправки XHR обнаружитFormData
объект и автоматически установит заголовок типа контента на multipart / form-data с правильной границей .источник
filesInput
Директива не кажется , работает с угловыми 1.6.7, я могу видеть файлы вng-repeat
но то же$scope.variable
пустая в контроллере? Также один из ваших примеров используетfile-model
и одинfiles-input
select-ng-files
. Протестировано с AngularJS 1.7.2.У меня только что была эта проблема. Так что есть несколько подходов. Во-первых, новые браузеры поддерживают
Перейдите по этой ссылке в блог с информацией о том, как поддержка ограничена современными браузерами, но в остальном это полностью решает эту проблему.
В противном случае вы можете опубликовать форму в iframe, используя целевой атрибут. При публикации формы обязательно установите целевое значение для iframe со свойством display, равным none. Цель - это имя iframe. (Просто, чтобы вы знали.)
надеюсь, это поможет
источник
Я знаю, что это поздняя запись, но я создал простую директиву загрузки. Что вы можете получить работу в кратчайшие сроки!
ng-simple-upload more on Github с примером использования Web API.
источник
Вы можете загрузить через
$resource
, назначив данные атрибуту params ресурсаactions
следующим образом:источник
Я только что написал простую директиву (из существующего, конечно) для простого загрузчика в AngularJs.
(Точный плагин для загрузки jQuery: https://github.com/blueimp/jQuery-File-Upload )
Простой загрузчик, использующий AngularJs (с реализацией CORS)
(Хотя серверная часть для PHP, вы можете просто изменить его узел)
источник