Il seguente codice per il caricamento delle texture funzionava in angularjs 1.2.26 ma ha smesso di funzionare quando ho aggiornato la mia applicazione web alla 1.3.0.'Token inaspettato' in caricamento AJAX di multipart/form-data in angular.js 1.3.0
codice HTML
<input file-model="file" name="file" type="file">
direttiva fileModel
app.directive('fileModel', [ '$parse', function($parse) {
return {
restrict : 'A',
link : function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
element.bind('change', function() {
scope.$apply(function() {
modelSetter(scope, element[0].files[0]);
});
});
scope.$on("reset", function() {
element.val(null);
});
}
};
} ]);
Upload Funzione - In 1.2.26 scegliendo "multipart/form-data", come Content-Type non avrebbe funzionato. Ma con "indefinito" come angolare Content-Type farebbe un qualche tipo di magia che lo farebbe funzionare.
var upload = function(textureUploadUrl) {
var formData = new FormData();
formData.append('name', $scope.name);
formData.append('file', $scope.file);
$http.post(textureUploadUrl, formData, {
transformRequest : angular.identity,
headers : {
'Content-Type' : undefined
}
}).success(function(uploadedTexture) {
console.log(uploadedTexture);
// further processing of uploadedTexture
});
}
ERRORE:
SyntaxError: Unexpected token h
at Object.parse (native)
at fromJson (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:1104:14)
at defaultHttpResponseTransform (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8572:18)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8517:12
at forEach (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:335:20)
at transformData (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8516:3)
at transformResponse (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:9224:23)
at processQueue (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:12914:27)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:12930:27
at Scope.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:14123:28)
Qualcuno sa come ottenere questo lavoro nella nuova versione?
UPDATE
Ho ridotto il problema un po '. Non funziona con 1.3.0-rc.5, ma con la versione precedente (rc.4) funziona. Quindi, attualmente sto cercando di capire quali cambiamenti portano al mio problema. Ecco lo changelog.
+1. Ho avuto excatly lo scenario (upload di file che restituisce l'url) ma con la maglia invece di Spring MVC. La stessa soluzione funziona, annoto la mia risorsa con l'equivalente jersey: '@Produces (TEXT_PLAIN)'. Mi hai salvato un sacco di tempo. – gontard
Felice di sentirlo! All'inizio pensavo che avesse a che fare con il caricamento stesso, ma si è scoperto che si trattava di un problema con la risposta. – Jonas
Si noti che il problema si verifica quando si esegue l'aggiornamento da 1,2 angolare a 1,3. – gontard