Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

HTTP POST Multipart Form-data

Olá pessoal,

Estou tentando fazer um campo para upload de imagem e salva-la no google-drive.

Fiz um serviço web que faz esse upload no drive pra min, porém quando eu o invoco do angular recebo o seguinte erro:

Uncaught Error: [ng:areq] Argument 'fn' is not a function, got undefined
http://errors.angularjs.org/1.5.8/ng/areq?p0=fn&p1=not%20a%20function%2C%20got%20undefined
    at angular.js:68
    at assertArg (angular.js:1892)
    at assertArgFn (angular.js:1902)
    at Promise.promise.success (angular.js:11474)
    at Scope.EventDialogController.$scope.uploadFile (dialog.controller.js:76)
    at HTMLInputElement.onchange (:8080/#/event/new:1)

Este é o código do meu controller:

(function() {
    'use strict';

    angular
        .module('eventAp')
        .controller('EventDialogController', EventDialogController);

    EventDialogController.$inject = ['$timeout', '$scope', '$stateParams', '$uibModalInstance', '$q', 'entity', 'Event', 'EventCategory', 'User', '$http'];

    function EventDialogController ($timeout, $scope, $stateParams, $uibModalInstance, $q, entity, Event, EventCategory, User, $http) {
        var vm = this;

        vm.event = entity;
        vm.clear = clear;
        vm.datePickerOpenStatus = {};
        vm.openCalendar = openCalendar;
        vm.save = save;

       $scope.uploadFile = function (files){
            var fd = new FormData();
            fd.append("file", files[0]);

            $http.post("/api/file/upload", fd,{
               headers:{'Content-Type': undefined},
               transformRequest: angular.identity
            }).success()
              .error(console.log('ERROR'));
        };

Não achei muitas formas de solucionar esse problema, se alguem puder me dar uma ajuda :)

3 respostas
solução!

Victor, você precisa passar funções de callback nas respostas de erro e sucesso.

$http.post(url, data, params)
  .success(function() {})
  .error(function(e) {
    console.log(e);
  });

Caso você não tenha nenhum callback de sucesso, também não precisa chamar o método success(), chamando só o error();

$http.post(url, data, params)
  .error(function(e) {
    console.log(e);
  });

Victor, conseguiu resolver seu problema, ou algo novo surgiu que seja relacionado?

Marcos tudo bom? Desculpa a demora para dar um feedback.

O problema era esse mesmo. Feito isso consegui fazer a chamada do método e enviar um formdata como parametro:

        $scope.uploadFile = function(files){

            var fd = new FormData();
            console.log(files)
            fd.append('inputFile', files[0]);

        $http.post('api/file/upload', fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function(data, status){
            vm.event.imageUrl = data.filesData[0].path;
        })
        .error(function(){
            console.log('Error to call upload API.');
        });

        }