vue axios form-data格式传输数据和文件方式
作者:寻ing 发布时间:2024-04-30 10:18:57
标签:vue,axios,form-data,传输数据,文件
axios form-data格式 传输数据和文件
form-data是在post请求下的一种传输方式,数据会在Form Data中传输,他的格式不是正常的JSON格式传输的,传输的数据由boundary
(例子中的------WebKitFormBoundaryRO0YA4pq9oCgwTkt
)来分割
------WebKitFormBoundaryRO0YA4pq9oCgwTkt
Content-Disposition: form-data; name="id"
undefined
------WebKitFormBoundaryRO0YA4pq9oCgwTkt
Content-Disposition: form-data; name="type"
1
------WebKitFormBoundaryRO0YA4pq9oCgwTkt
Content-Disposition: form-data; name="name"
......此处省略一堆参数
------WebKitFormBoundaryRO0YA4pq9oCgwTkt--
开始
默认的headers
中的Content-Type
是application/x-www-form-urlencoded
,首先要把Content-Type
改为
multipart/form-data; boundary={boundary}
(boundary
找你的后端要)
axios({
url: "/aaa/bbb",
method: 'post',
data: xxx,
headers: {"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0" }
})
// 或者在路由拦截中统一修改
service.interceptors.request.use(
req => {
req.headers = {
// 'Content-Type': 'application/json',
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0',
}
return req;
}
FormData
开头处我们说了form-data
的传输格式,我们需要使用到formData对象
new FormData()
比如我们需要传输的对象是
{
name: '小红',
age: 18,
file: File {name: "xxx.jpg",...} // 一个图片文件
}
可以先创建一个FormData
对象,然后通过.append(key,val)
的方式将需要的内容放在FormData
对象中,传参时把这个对象传过去就可以了
let formData = new FormData();
formData.append('name','小红');
formData.append('age',18);
formData.append('file',File文件);
传输
整体传输示例
// html
<input type="file" ref="input" />
// js
let formData = new FormData();
formData.append('name','小红');
formData.append('age',18);
formData.append('file',this.$refs.input.files[0]);
let url = '你的请求地址'
axios.post(url,formData,{
headers:{
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryn8D9asOnAnEU4Js0"
}
})
vue axios与FormData结合提交文件 上传文件
---再利用Vue、axios、FormData做上传文件时,遇到一个问题,后台虽然接收到请求,但是将文件类型识别成了字符串,所以,web端一直报500,结果是自己大意了。
1.因为使用了new FormData来操作表单
并且在测试模拟请求时,从消息头里看到的确实是表单提交【Content-Type: multipart/form-data】. 所以就没有单独在设置.
结果后来加上了这个配置才可以通过了。
这个必须设置:Content-Type: multipart/form-data
2.结合Vue、axios、FormData使用的例子
<template>
<div id="sample">
<!--accept定义接收的文件类型,这里只接受图片-->
<input id="fileinput" @change="uploading($event)" type="file" accept="image/*">
<button @click="submit($event)"></button>
</div>
</template>
<script>
export default {
name: 'sample',
data () {
return {
file:'',
src:''
};
},
methods:{
uploading(event){
this.file = event.target.files[0];//获取文件
var windowURL = window.URL || window.webkitURL;
this.file = event.target.files[0];
//创建图片文件的url
this.src = windowURL.createObjectURL(event.target.files[0]);
},
submit(){
event.preventDefault();//取消默认行为
let formdata = new FormData();
formdata.append('file',this.file);
//此处必须设置为 multipart/form-data
let config = {
headers: {
'Content-Type': 'multipart/form-data' //之前说的以表单传数据的格式来传递fromdata
}
};
this.$http.post('/upload', formData, config).then( (res) => {
//做处理
}).catch((error) =>{
});
}
}
};
</script>
<style lang="css" scoped>
</style>
来源:https://blog.csdn.net/block_xu/article/details/108490016


猜你喜欢
- # _*_ coding:utf-8 _*_# name login_baidu.pyimport urllib,urllib2,httpl
- 前言:vue-router的切换不同于传统的页面的切换。路由之间的切换,其实就是组件之间的切换,不是真正的页面切换。这也会导致一个问题,就是
- 前言随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站
- Pytorch多GPU运行设置可用GPU环境变量。例如,使用0号和1号GPU'os.environ["CUDA_VISIB
- 1. Document.form.item 问题 现有问题:  
- with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ impo
- #!/usr/bin/perl -wuse strict;use warnings;use FileHandle;my %fh;my @ar
- 一.axisaxis就是指定轴。三维数组可看作元素是二维数组的一维数组,二维数组可看作元素是一维数组的一维数组 。(这么理解就舒服了!)例:
- 介绍这个例子主要利用turtle库实现根据输入动态展示不同机器人的图像和属性信息。代码部分非原创只是做了些许修改和整理使得更易阅读。图片和文
- 纵观各大编程语言在 2017 年的发展情况,我们会发现涌现出诸如 Go、Swift 这类后起之秀,而其中最为耀眼的当属 Python。之所以
- 在项目开发的过程中,经常会遇到要查看图像细节的问题,这时候我们通常会,滚动滑轮将图像放大,或者使用电脑内置的放大器功能进行查看,如下图所示,
- Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据
- jQuery.parent(expr) &nb
- jquery模拟SELECT框,效果图如下: <!DOCTYPE html> <html lang="
- python实现简单神经网络算法,供大家参考,具体内容如下python实现二层神经网络包括输入层和输出层import numpy as np
- 前言好记性不如烂笔头!最近在接口测试,以及爬虫相关,需要用到Python中的requests库,之前用过,但是好久没有用又忘了,这次就把这块
- 方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib方法2: 多文件模块,文件内有setup.py文件在官网或者GitHub
- 区别:series,只是一个一维数据结构,它由index和value组成。dataframe,是一个二维结构,除了拥有index和value
- 首先,简单介绍一下EXECL中工作簿和工作表的区别:工作簿的英文是BOOK(WORKBOOK),工作表的英文是SHEET(WORKSHEET
- 在使用matplotlib模块时画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等 在mat