A POST
solicitação axios está atingindo a URL no controlador, mas configurando valores nulos para minha classe POJO. Quando passo pelas ferramentas de desenvolvedor no chrome, a carga contém dados. O que estou fazendo de errado?
Solicitação POS Axios:
var body = {
userName: 'Fred',
userEmail: '[email protected]'
}
axios({
method: 'post',
url: '/addUser',
data: body
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Resposta do navegador:
Se eu definir cabeçalhos como:
headers:{
Content-Type:'multipart/form-data'
}
A solicitação lança o erro
Erro ao postar dados de várias partes / formulário. Falta o limite do cabeçalho do tipo de conteúdo
Se eu fizer o mesmo pedido no carteiro, ele está funcionando bem e define valores para minha classe POJO.
Alguém pode explicar como definir limites ou como posso enviar dados de formulário usando axios.
fonte
set
não trabalhar{ method: 'post', url: 'myurl', data: bodyFormData, headers: {'Content-Type': 'multipart/form-data' } }
Confira a string de consulta .
Você pode usá-lo da seguinte maneira:
fonte
No meu caso, tive que adicionar o limite ao cabeçalho da seguinte forma:
Essa solução também é útil se você estiver trabalhando com o React Native.
fonte
FormData._boundary
é indefinido no Chrome 76 e no Firefox 67, e axios exclui o cabeçalho Content-Type de qualquer maneira , portanto, isso não deve ter efeito.Carregar (vários) arquivos binários
Node.js
As coisas ficam complicadas quando você deseja postar arquivos
multipart/form-data
, especialmente vários arquivos binários. Abaixo está um exemplo de trabalho:headers: {'Content-Type': 'multipart/form-data' }
eu prefiroheaders: formData.getHeaders()
async
eawait
acima, você pode alterá-los para declarações Promise simples, se você não gosta delesConteúdo adicionado recentemente abaixo:
Navegador
O navegador
FormData
é diferente do pacote NPM 'form-data'. O código a seguir funciona para mim no navegador:HTML:
JavaScript:
fonte
concat-stream
,async
eawait
) para upload de múltiplos arquivos usandofor(var x = 0; x<this.state.files.length; x++) { formData.append('files[]', this.state.files[x]) }
para que eu possa enviar utilizandoaxios.post(url, formData, config)
Ainda mais direto:
fonte
Usando o formato application / x-www-form-urlencoded nos axios
Navegador
Em um navegador, você pode usar a API URLSearchParams da seguinte maneira:
Observe que URLSearchParams não é suportado por todos os navegadores (consulte caniuse.com), mas há um polyfill disponível (certifique-se de polyfill no ambiente global).
Como alternativa, você pode codificar dados usando a biblioteca qs:
Ou de outra maneira (ES6),
fonte
2020 ES6 maneira de fazer
Tendo o formulário em html, liguei os dados da seguinte forma:
DADOS:
onSubmit:
fonte
O método acima funcionou para mim, mas como era algo que eu precisava com frequência, usei um método básico para objetos planos. Observe que eu também estava usando o Vue e não o REACT
O que funcionou para mim até eu encontrar estruturas de dados mais complexas com objetos e arquivos aninhados, que permitem o seguinte
fonte
objectToFormData
quepackageData
ou vice-versafonte