欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue formData实现图片上传

程序员文章站 2023-09-03 16:07:59
本文实例为大家分享了vue formdata实现图片上传的具体代码,供大家参考,具体内容如下 import vue from 'vue' /** *...

本文实例为大家分享了vue formdata实现图片上传的具体代码,供大家参考,具体内容如下

import vue from 'vue'
 
/**
 * 图片上传
 * 已注入所有vue实例,
 * template模板里调用 $uploadfile(id)
 * 组件方法里调用 this.$uploadfile(id)
 */
const uploadfile = (id) => {
 let promise = new promise((resolve, reject) => {
  let file = null
  let el = null
  let i = 0
  let formdata = new formdata()
  document.getelementbyid(id).click()
  el = document.getelementbyid(id)
  el.addeventlistener('change', function (e) {
   i++
   if (i !== 1) {
    return false
   } else {
    file = this.files[0]
    formdata.append('file', file)
    formdata.append('filetype', 'image')
    // 数据请求
    vue.axiosfrom(vue.api.upload, formdata).then(res => {
     // 返回图片url
     resolve(res)
    }).catch(err => {
     reject(err)
    })
   }
  })
 })
 return promise
}
 
vue.prototype.$uploadfile = uploadfile

axios请求头设置

import vue from 'vue'
import { baseurl } from '@/config/env'
import axios from 'axios'
 
// formdata 请求
const axiost = axios.create({
 baseurl: baseurl,
 headers: {
  'content-type': 'multipart/form-data'
 }
})
 
const xhr = ({method = 'post', qs = true, loading = false, loginrequire = true, reqcomplex = false, reqcontenttype = 'urlencoded'}) => {
 // 带请求进度条成功方法
 const sucfunx = res => {
  return res.data
 }
 // 成功执行方法
 const sucfunc = res => {
  return res.data
 }
 // 带请求进度条失败方法
 const errfunx = err => {
  console.log(err, nprogress.done())
 }
 // 失败执行访求
 const errfunc = err => {
  console.log(err)
 }
 // 判断是否需要longing
 const sucfun = loading ? sucfunx : sucfunc
 // 判断是否需要longing
 const errfun = loading ? errfunx : errfunc
 return {user, sucfun, errfun}
}
 
// 表单请求 图片上传
const axiosfrom = function (url = '', data = {}) {
 let {sucfun, errfun} = xhr({loading: false})
 return axiost.post(url, data).then(sucfun).catch(errfun)
}
// 表单请求
vue.prototype.$axiosfrom = axiosfrom
vue.axiosfrom = axiosfrom

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。