前几天有一个文件上传功能,用的是post请求,需要传file文件流以及其他的参数,总结了两种方法。
需求:传name和文件流。
第一种方法(基于axios):
data定义额外参数,name定义文件流名称。
参数赋值:
paramsData = { name: ‘admin’}
name = “file”
完整代码:
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:headers="authToken"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList"
name="file"
:data="paramsData">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
只能上传jpg/png文件,且不超过500kb
</div>
</el-upload>
注意:设置token的值
authToken: {
token: 'abcjdjeidei',
},
第二种方法(基于fetch):
条件: (1)用fetch请求
(2)获取到文件内容,此处保存的是el-upload组件上传文件参数file文件,名称叫currentFile
(3)接口名字:/detail/info
(4)token值:‘abcjdjeidei’
代码如下:
const formData = new FormData();
formData.append('file',this.currentFile.raw);
formData.append('name', 'admin');
fetch(process.env.API_ROOT + '/detail/info', {
method: 'post',
body: formData,
headers: {
'token': 'abcjdjeidei'
}
}).then(response=>
response.json())
.then(res=>{
if (res.code === 0) {
this.$message.success(res.msg);
} else {
this.$message.error(res.msg);
}
})
.catch(error=>{
// console.log(error)
})
.finally(response=>{
// console.log(response)
})
注意: response.json()是转换后端返回的数据,这样才能在then回调里获取code状态码和msg描述。