Problem polega na tym, że gdy wykonuje request do serwera z nagłówkiem PUT to w parametrach wysyłany jest pusty obiekt z formData. Jestem pewien, że formData nie jest pusty, ponieważ filtrując go metodą serialize zwraca mi parametry. Ogólnie formularz przekazuje informacje o pliku (tj: jest tam upload) - stąd taka metoda przekazywania danych. Więc teraz trochę kodu:
var form = angular.element('#form-upload'), formData = new FormData(form.get(0)); $resource('link', {}, { update: { method: 'PUT', params: formData, transformRequest: angular.identity, headers: { 'Content-Type': undefined } } }).update(function(response) { console.log('aa'); });
Najdziwniejsze jest to, że gdy w/w kod zmienię na ten co stosuje w przypadku tworzenia (metod: POST) to wszystko działa:
var form = angular.element('#form-upload'), formData = new FormData(form.get(0)); $resource('link do tworzenia', {}, { save: { method: 'POST', transformRequest: angular.identity, headers: { 'Content-Type': undefined } } }).save(formData, function(response) { // udało się }, function(response) { // error });
Próbowałem zmodyfikować w/w kod i zmienić tylko nagłówek na PUT i resztę zostawić (tj: metodę "save", itd.) - jednak to także nie pomogło i zwracany jest pusty obiekt.
W konsoli jak idzie request to widzę, że PUT NIC nie przekazuje, więc to nie wina frameworka (backendu).
Podejrzewam, że źle wykorzystuje PUT - ma ktoś jakieś pomysły jak do tego podejść?