温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在Vue中使用axios上传图片

发布时间:2021-05-27 16:08:47 来源:亿速云 阅读:615 作者:Leah 栏目:开发技术

如何在Vue中使用axios上传图片?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

在vue和axios的配合下实战一波

<!--
    *.vue组件中的上传组件 
    我这里使用的是buefy的vue组件
-->

<form  method="post" enctype="multipart/form-data">
    <b-field class="file is-primary" :class="{'has-name': !!file}">
        <b-upload v-model="file" class="file-label" @input="getModifyAvatar()">
            <span class="file-cta">
                <b-icon class="file-icon" icon="upload"></b-icon>
                <span class="file-label">Click to upload</span>
            </span>
            <span class="file-name" v-if="file">
                {{ file.name }}
            </span>                    
       </b-upload>
   </b-field>
</form>

<script>
    export default {
        data(){
            return {
                userInfo: '',   // 通过一个get请求把用户相关信息赋值给它
                file: null,
            }
        },
        methods: {
            // 修改头像
            getModifyAvatar(){
                const formData = new FormData();
                // 构造formData数据
                formData.append('avatar', this.file)
                // 提交put请求
                getModifyInfo(formData).then(res => {
                    this.userInfo.avatar = res.data.avatar
                })
            },
        }
    }
</script>
// api.js
// 这是我封装的全局请求方法
import { request } from '../network/request'

// 修改用户头像
export const getModifyInfo = (params) => {
    return request({
        url: 've_register/1/',
        method: 'put',
        headers: { 'Content-Type': 'multipart/form-data' },
        data: params
    })
}

看以上代码,注意发送请求的时候一定要设置请求头header,如上所示,html表单form中也需要设置下enctype="multipart/form-data" 否则也是不行的!

通过上面的例子我们目前只用到了FormData的append()方法,网上大部分关于 FormData 介绍的文章都只提到了append()方法,那么FormData 对象到底有些什么方法呢?其实我们console 一下就知道了:

如何在Vue中使用axios上传图片

console 之后我们有重大的发现,FormData 对象竟然有这么多方法,所以还是自己测试才能发现真相,下面就对这些方法一一进行讲解:

append()

append()方法用于向 FormData 对象中添加键值对:

fd.append('key1',"value1");
fd.append('key2',"value2");

fd是 FormData 对象,可以新建的空的对象,也可以是已经包含 form 表单或其他键值对。

set()

设置对应的键 key 对应的值 value(s)

fd.set('key1',"value1");
fd.set('key2',"value2");

append() 方法有点类似,这两者的区别就是,当指定的 key 值存在时,append()方法是将新增的添加的所有的键值对最后,而set()方法将会覆盖前面的设置的键值对。还是通过实例来对比,我们在前面的 form 的基础上 append() 或 set() 新的键值对:

fd.append('name',"will");

有两个key为name的键值对:

如何在Vue中使用axios上传图片

以上就是 append() 和 set() 的区别。如果设置的key值不存在,那么两者的效果是一样的。

delete()

接收一个参数,表示你要删除的 key 值的名字,如果有多个相同 key 值,会一并删除:

fd.append('name','will');
fd.delete('name');

form 中的 name 信息以及通过append() 新增的name 的信息都被删除了。

get() 和 getAll()

接收一个参数,表示需要查找的 key 的名称,返回第一个该 key 对应的 value 值。如果有多个相同的 key, 而且要返回所有的这个 key 对应的 value 值。

同样以上面的 form 表单为基础:

fd.append('name','will');
console.log(fd.get('name')); // sean
fd.append('name','will');
console.log(fd.getAll('name')); // ["sean", "will"]

has()

该方法也接收一个参数,同样是 key 的名称,返回一个Boolean 值, 用来判断FormData 对象是否含有该 key。以上面的form为例:

console.log(fd.has('name')); // true
console.log(fd.has('Name')); // false

vue是什么

Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

看完上述内容,你们掌握如何在Vue中使用axios上传图片的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI