Envie arquivos de várias partes / dados de formulário com angular usando $ http

Sei que há muitas perguntas sobre isso, mas não consigo fazer isso funcionar:

Quero fazer upload de um arquivo de entrada para um servidor em multipart / form-data

Eu tentei duas abordagens. Primeiro:

headers: {
  'Content-Type': undefined
},

O que resulta em, por exemplo para uma imagem

Content-Type:image/png

embora deva ser multipart / form-data

e o outro:

headers: {
  'Content-Type': multipart/form-data
},

Mas isso pede um cabeçalho de limite, que acredito que não deve ser inserido manualmente ...

Qual é uma maneira limpa de resolver esse problema? Eu li que você pode fazer

$httpProvider.defaults.headers.post['Content-Type'] = 'multipart/form-data; charset=utf-8';

Mas não quero que todas as minhas postagens sejam multipart / form-data. O padrão deve ser JSON

questionAnswers(3)

yourAnswerToTheQuestion