AngularJs: загрузка нескольких файлов из разных источников
Я пытаюсь загрузить два разных файла, изображение и PDF-файл, каждый из которых выглядит следующим образом:
<div class="form-group" ng-class="libraries.error.img[0] ? 'has-error' : ''">
<label for="img">Image</label>
<input type="file" accept="image/*" ngf-select="" ngf-multiple="true" class="form-control" id="img" name="img" placeholder="Image" ng-model="libraries.library.img">
<p ng-if="libraries.error.img[0]" style="color: red">{{libraries.error.img[0]}}</p>
</div>
<div class="form-group" ng-class="libraries.error.document[0] ? 'has-error' : ''">
<label for="document">Document</label>
<input type="file" accept="application/pdf" ngf-select="" class="form-control" id="document" name="document" placeholder="Document" ng-model="libraries.library.document">
<p ng-if="libraries.error.document[0]" style="color: red">{{libraries.error.document[0]}}</p>
</div>
В файле служб я отправляю его с помощью следующего:
store: function (library) {
console.log(library);
return Upload.upload({
url: 'api/libraries',
method: 'POST',
fields: {name: library.name, location: library.location},
file: [library.img, library.document]
});
},
Но когда я пытаюсь получить файлы на стороне сервера следующим образом:
return $_FILES;
Я продолжаю получать:
[] No Properties
Однако, когда я изменяю файл на
file: library.img
имеется ввиду, я передаю только один файл, все работает.
я использую ng-file-upload
с AngularJS
и на стороне сервера Laravel
Любая идея, чтобы решить эту проблему, позволяя оба файла для отправки на сервер?!
1 ответ
У меня была та же проблема, и я смог ее исправить, дав объекту JSON для каждого файла свое имя (черпая вдохновение отсюда). Если бы я не переименовал объекты, сервер получил бы правильное количество файлов, но все они были бы идентичны. Так что если вы примените это, ваш код будет:
store: function (library) {
console.log(library);
return Upload.upload({
url: 'api/libraries',
method: 'POST',
fields: {name: library.name, location: library.location},
file: [library.img, library.document]
fileFormDataName: [name1, name2]
});
},
Я считаю, что имена могут быть любыми, если они уникальны. Однако теперь вы должны обрабатывать объекты отдельно на стороне вашего сервера. Я не знаком с тем, как вы могли бы сделать это в PHP, но на моем бэкэнде Rails я могу собрать все файлы по их классу:
files = params.values.find_all { |value| value.class == ActionDispatch::Http::UploadedFile }
Затем я просто назначаю каждому файлу соответствующий атрибут моей модели.