Я пытаюсь загрузить файл вместе с некоторыми другими данными (имя, описание и т.д.) В MySQL DB, используя AngularJS, REST (в среднем слое) и Hibernate (DAO).
Я пробовал много решений, включая создание моей собственной directive
но все же я не могу этого сделать.
И я не использую <form>
в моем jsp
для отправки. Вместо этого я использую ng-click=submit()
в конце.
Сомнения: -
Тип данных объектов DTO и DAO для типа файла? (byte[]
или blob
).
Как связать файл с файлом $scope.data
где data
содержат всю другую информацию вместе с file
?
$http.post(url,$scope.data)
. как получить доступ к этому методу REST.
@Consumes(??) Response function add(DTO object){//CALL TO DAO AND RETURN RESPOSNE }
Я пробовал код на этой веб-странице, но как обрабатывать его через REST
все еще проблема?
Лучше, если вы опубликовали базовый фрагмент кода для этого
Именно так я использовал мой проект год назад. Вы можете попробовать:
HTML:
<form id="signupform" name="signupform" ng-submit="createUser()">
<label for="email">Email</label>
<input type="email" ng-model="regisUser.email" ng-minlength="3" required />
<label for="username">Username</label>
<input type="text" ng-model="regisUser.username" required />
//File upload
<input type="file" name="file" required>
<button id="btn-signup" type="submit">Save</button>
</form>
Контроллер AngularJS:
// create new user
$scope.createUser = function(){
var formData = new FormData();
formData.append("username", $scope.regisUser.username);
formData.append("email", $scope.regisUser.email);
formData.append("avatar", document.forms['signupform'].file.files[0]);
$http({
method: 'POST',
url: '/api/users',
headers: {'Content-Type': undefined},
data: formData
})
.success(function(data, status) {
...
})
.error(function(data, status){
...
});
};
Обратите внимание, что headers: {'Content-Type': undefined}
очень важны. Не забудьте это :)
Регулятор пружины:
@RequestMapping(value = "/api/users", method = RequestMethod.POST)
public Response insert(@RequestParam String username, @RequestParam String email, @RequestParam(required = false) MultipartFile avatar) {
// now you can get avatar as file that was uploaded from client.
}
Я использовал этот способ для загрузки изображений и аудиофайлов. Надеюсь, что код с некоторыми фрагментами полезен.
FileReader
вместоFormData
так как я не использовал форму в моем HTML.