Usando HTML bruto ao postar um arquivo em um servidor flask, posso acessar arquivos da solicitação flask global:
<form id="uploadForm" action='upload_file' role="form" method="post" enctype=multipart/form-data>
<input type="file" id="file" name="file">
<input type=submit value=Upload>
</form>
Em frasco:
def post(self):
if 'file' in request.files:
....
Quando tento fazer o mesmo com o Axios, a solicitação de frasco global está vazia:
<form id="uploadForm" enctype="multipart/form-data" v-on:change="uploadFile">
<input type="file" id="file" name="file">
</form>
uploadFile: function (event) {
const file = event.target.files[0]
axios.post('upload_file', file, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
Se eu usar a mesma função uploadFile acima, mas remover os cabeçalhos json do método axios.post, obtenho na chave do formulário do meu objeto de solicitação de balão uma lista csv de valores de string (o arquivo é um .csv).
Como posso obter um objeto de arquivo enviado via axios?
javascript
ajax
file-upload
axios
Don Smythe
fonte
fonte
v-on:change="uploadFile"
com eminput
vez deform
tag?Respostas:
Adicione o arquivo a um
formData
objeto e defina oContent-Type
cabeçalho comomultipart/form-data
.fonte
$_FILES
para obter arquivos no lado do servidor, pois estou usando PHPFormData
. De acordo com o documento do axios, ambosFile
eFormData
são tratados apenas como navegador , então as duas formas podem ser vistas igualmente ( github.com/axios/axios#request-config )data:formData
formData.getHeaders()
Este é um problema conhecido com axios; veja por exemplohttps://github.com/axios/axios/issues/789
Aplicação de amostra usando Vue. Requer um servidor de back-end em execução no host local para processar a solicitação:
https://codepen.io/pmarimuthu/pen/MqqaOE
fonte
Isso funciona para mim, espero que ajude alguém.
fonte
headers: { 'Content-Type': 'multipart/form-data' }
era a única maneira de realmente enviar a postagem após obter uma resposta do servidor das opções. Provavelmente estou fazendo algo errado, mas está funcionando e estou deixando isso sozinho lol