$HttpProvider's default request transform function looks like this:
// transform outgoing request data
transformRequest: [function(d) {
return isObject(d) && !isFile(d) ? toJson(d) : d;
}],
and isFile(d) basically tests that d.toString() === '[object File]'. so, angular is trying to tranform your formdata with toJson() which won't work I guess.
You could make $
http.post() work with formdata by overriding the tranform function, e.g.:
transformRequest: function(data) { return data /* data here is myformdata */ }
})