Usando HTML sin procesar cuando publico un archivo en un servidor de matraces usando lo siguiente, puedo acceder a archivos desde la solicitud de matraz 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>
En frasco:
def post(self):
if 'file' in request.files:
....
Cuando intento hacer lo mismo con Axios, la solicitud del matraz global está vacía:
<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'
}
})
}
Si uso la misma función uploadFile anterior pero elimino los encabezados json del método axios.post, obtengo en la clave de formulario de mi objeto de solicitud de matraz una lista csv de valores de cadena (el archivo es un .csv).
¿Cómo puedo enviar un objeto de archivo a través de axios?
javascript
ajax
file-upload
axios
Don Smythe
fuente
fuente
v-on:change="uploadFile"
con eninput
lugar deform
etiqueta?Respuestas:
Agregue el archivo a un
formData
objeto y establezca elContent-Type
encabezado enmultipart/form-data
.fuente
$_FILES
para obtener archivos en el lado del servidor ya que estoy usando PHPFormData
. Según el documento de axios, ambosFile
yFormData
se tratan solo como navegador , por lo que ambas formas se pueden ver por igual ( github.com/axios/axios#request-config )data:formData
formData.getHeaders()
Este es un problema conocido con axios; ver por ejemplohttps://github.com/axios/axios/issues/789
Aplicación de muestra usando Vue. Requiere un servidor backend que se ejecute en localhost para procesar la solicitud:
https://codepen.io/pmarimuthu/pen/MqqaOE
fuente
Esto funciona para mí, espero que ayude a alguien.
fuente
headers: { 'Content-Type': 'multipart/form-data' }
era la única forma en que realmente enviaría la publicación después de obtener una respuesta del servidor de las opciones. Probablemente estoy haciendo algo mal, pero está funcionando y lo dejo solo jajaja