angularjs post file-upload restangular

angularjs - Establecer encabezados y params http para una sola solicitud en restangular



post file-upload (3)

Estoy tratando de usar restangular para la carga de archivo de la solicitud, quiero lograr la misma funcionalidad que a continuación en restangular. Sin embargo, no estaba seguro de cómo configurar el tipo de contenido y transformRequest solo para esta solicitud en particular. Si entiendo correctamente, setDefaultHeader lo establece para todas las solicitudes posteriores. ¿Hay alguna otra manera?

myApp.service(''$fileUpload'', [''$http'', function ($http) { this.uploadFileToUrl = function(file, uploadUrl){ var filedata = new FormData(); filedata.append(''file'', file); $http.post(uploadUrl, filedata, { transformRequest: angular.identity, headers: {''Content-Type'': undefined} }) .success(function(){ }) .error(function(){ }); } }]);


Para configurar los encabezados para una sola solicitud, todo lo que tendrá que hacer es agregar un objeto que contenga el nombre y el valor de los encabezados como argumento para .post (), .get () o el método que necesite.

https://github.com/mgonto/restangular#element-methods

Restangular.all(''some-endpoint'').post(postContent, {}, {''Content-Type'': undefined}).then(function (response) { console.log(''Weeeeee!!!''); });

En cuanto a la transformRequest de la que no estoy seguro, no he tenido que lidiar con nada parecido antes, esto es lo único que pude encontrar en la documentación:

https://github.com/mgonto/restangular#setdefaulthttpfields

Pero eso parece establecerlo para toda la solicitud que no es lo que quieres, pero es algo al menos.

De todos modos, con suerte esto te ayudará a obtener lo que quieres.

Editar:

Dado que la mayoría de los tipos de solicitud en restangular tienen un param de consulta y luego los encabezados que necesita pasar en un objeto param de consulta en blanco y luego los encabezados, el ejemplo se ha actualizado para mostrar esto.


Dado que este es el primer golpe en Google para este problema, vea el Issue 420 en el rastreador de problemas Restangular.

Básicamente, el Restangular más nuevo tiene una función withHttpConfig para establecer las opciones de $http justo antes de enviar una solicitud.

Si tiene una ruta en una URL como example.com/api/users/:id/picture que acepta una carga de varias partes con una imagen para un usuario específico, podría hacer algo como:

Users.one(2) .withHttpConfig({transformRequest: angular.identity}) .customPOST(filedata, ''picture'', undefined, {''Content-Type'': undefined}) .then(function(resp) { // File data post is complete here });

Por defecto, Angular transformará cualquier información enviada con $http a JSON. La configuración de transformRequest simplemente reemplaza esa transformación predeterminada con un NOP .


Aquí tienes 2 situaciones, el POST para crear un nuevo elemento o el PUT para editar un elemento:

// Save new Item $scope.saveNew = function (item) { var data = new FormData(); angular.forEach(item, function (fieldData, field) { data.append(field, fieldData); }); Restangular .all(''items'') .withHttpConfig({transformRequest: angular.identity}) .post(data, {}, {''Content-Type'': undefined}) .then(function () { // do on success }, function () { // do on failure }); }; // Edit existing Item $scope.save = function (item) { var data = new FormData(); angular.forEach(item.plain(), function (fieldData, field) { data.append(field, fieldData); }); Restangular .one(''items'', item._id) .withHttpConfig({transformRequest: angular.identity}) .customPUT(data, undefined, {}, {''Content-Type'': undefined}) .then(function () { $location.path(''sites''); });