vue+element-ui中 使用multipart上传文件

17 篇文章 0 订阅

以前做上传图片功能跟后端对接都是先把图片上传到oss ,然后把返回的url传给后端,这次后端说要传给他文件流的格式,要用'multipart/form-data'方式。 以前从来没做过,网上查资料,然后自己折腾了好久,踩了不少坑,终于做出来了, 特此记录一下。

<!-- 使用elements-ui的上传组件 -->
<template>
    <el-upload
    class="upload-demo"
    ref="upload"
    action="/"
    :on-change="uploadFile"
    :auto-upload="false"
    :show-file-list="false">
    <el-button slot="trigger" size="small" type="primary">上传图片</el-button>
    <div slot="tip" class="el-upload__tip">请上传JPG、JPEG、PNG,大小不超过2M</div>
    </el-upload>
    
    <el-button @click.native="submitForm" type="primary">提交</el-button>
</template>

上传方法


   uploadFile(file) {
      this.imgUrl = file.raw // 拿到文件的信息
   },

最后提交的时候需要注意下,要把格式转为 FormData 格式

还有请求头需要设置为 multipart/form-data

 

submitForm() {
    let formdata = new FormData()
    formdata.append(imgUrl, this.imgUrl)
    api.submit(formdata )// ...这边就是提交给后台的api了
}

/* 请求头
    headers: {
        'Content-Type': 'multipart/form-data'
      }
*/

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 首先引入element-ui和axios: ``` import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import axios from 'axios'; ``` 2. 在template添加上文件的组件: ``` <template> <div> <el-upload class="upload-demo" :action="uploadUrl" :on-progress="handleProgress" :file-list="fileList" :auto-upload="false" ref="upload"> <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-button size="small" type="success" @click="submitUpload">上到服务器</el-button> <div slot="tip" class="el-upload__tip">只能上jpg/png文件,且不超过500kb</div> </el-upload> <el-progress :percentage="uploadPercent" v-if="uploadPercent !== 0"></el-progress> </div> </template> ``` 3. 在script定义相关变量和方法: ``` export default { data() { return { uploadUrl: '/api/upload', // 上文件的url fileList: [], // 文件列表 uploadPercent: 0 // 上进度 }; }, methods: { // 处理上进度 handleProgress(event, file, fileList) { this.uploadPercent = event.percent; }, // 提交上文件 submitUpload() { this.$refs.upload.submit(); } } }; ``` 4. 在methods定义上文件的方法: ``` export default { // ... methods: { // ... // 上文件 uploadFile(file) { const formData = new FormData(); formData.append('file', file); axios.post(this.uploadUrl, formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: progressEvent => { this.uploadPercent = Math.round((progressEvent.loaded / progressEvent.total) * 100); } }).then(response => { console.log(response.data); // 处理上成功后的操作 }).catch(error => { console.log(error); // 处理上失败后的操作 }); } } }; ``` 5. 最后,将上文件的方法和submitUpload方法关联起来: ``` export default { // ... methods: { // ... // 提交上文件 submitUpload() { this.fileList.forEach(file => { this.uploadFile(file.raw); }); } } }; ``` 这样,就可以实现带有底部进度条和上进度的文件效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值