VUE axios上传图片到七牛的实例代码


Posted in Javascript onJuly 28, 2017

浏览器上传图片到服务端,我用过两种方法:

1.本地图片转换成base64,然后通过普通的post请求发送到服务端。

操作简单,适合小图,以及如果想兼容低版本的ie没办法用此方法

2.通过form表单提交。

form表单提交图片会刷新页面,也可以时form绑定到一个隐藏的iframe上,可以实现无刷新提交数据。但是如果想传输多条form表单数据,需要写很多dom,同时还要写iframe,太麻烦。

目前感觉比较干净的办法就是通过axios的post请求,发送form数据到后台。

html部分,至于界面优化,可以把input file的opacity设置为0,点击其父容器,即触发file

<input class="file" name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="update"/>

axios的post请求,发送form数据部分,这样就可以无刷新的提交form数据到后台

update(e){
     let file = e.target.files[0];      
     let param = new FormData(); //创建form对象
     param.append('file',file,file.name);//通过append向form对象添加数据
     param.append('chunk','0');//添加form表单中其他数据
     console.log(param.get('file')); //FormData私有类对象,访问不到,可以通过get判断值是否传进去
     let config = {
      headers:{'Content-Type':'multipart/form-data'}
     }; //添加请求头
     this.axios.post('http://upload.qiniu.com/',param,config)
     .then(response=>{
      console.log(response.data);
     })    
}

以下部分是扩展

vue开发环境下,上传图片到七牛

最近着手的约能人项目,需要上传图片到七牛,但是感觉只是简单的上传图片还需要引七牛的js,太麻烦了,就自己一切从简。实现逻辑:获取后台返回的七牛token,然后axios的post请求,发送form数据到七牛。

 七牛的token是其平台封装好的,直接在自己服务器配置就能获取到 在其官网上可以找到直接能用的代码  ,在七牛平台获取到后,返回给前台直接拿就好了

以下是直接上传图片到七牛,不需要安装七牛乱七八糟的js,只需要通过七牛的form表单上传就行了。

update(e){
     let file = e.target.files[0];
     let d = new Date();
     let type = file.name.split('.');
     let tokenParem = {
       'putPolicy':'{\"name\":\"$(fname)\",\"size\":\"$(fsize)\",\"w\":\"$(imageInfo.width)\",\"h\":\"$(imageInfo.height)\",\"hash\":\"$(etag)\"}',
       'key':'orderReview/'+d.getFullYear()+'/'+(d.getMonth()+1)+'/'+d.getDate()+'/'+d.valueOf()+'.'+type[type.length-1],
       'bucket':this.domain,//七牛的地址,这个是你自己配置的(变量)
     };
     let param = new FormData(); //创建form对象
     param.append('chunk','0');//断点传输
     param.append('chunks','1');
     param.append('file',file,file.name)
     console.log(param.get('file')); //FormData私有类对象,访问不到,可以通过get判断值是否传进去
     let config = {
      headers:{'Content-Type':'multipart/form-data'}
     };
    //先从自己的服务端拿到token
     this.axios.post(api.uploadToken,qs.stringify(tokenParem))
      .then(response=>{
        this.token = response.data.uploadToken;
        param.append('token',this.token);
        if(this.images.length>8){
          alert('不能超过9张');
          return;
        }
        this.uploading(param,config,file.name);//然后将参数上传七牛
        return;
      })
   },
   uploading(param,config,pathName){
    this.axios.post('http://upload.qiniu.com/',param,config)
     .then(response=>{
      console.log(response.data);
      let localArr = this.images.map((val,index,arr)=>{
       return arr[index].localSrc;
      })
      if(!~localArr.indexOf(pathName)){
       this.images.push({'src':this.showUrl+response.data.key,'localSrc':pathName});
      }else{
        alert('已上传该图片');
      }
     })
   },

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

Javascript 相关文章推荐
filemanage功能中用到的lib.js
Apr 08 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
jQuery中复合属性选择器用法实例
Dec 31 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 Javascript
js实现图片上传即时显示效果
Sep 30 Javascript
JS实现小星星特效
Dec 24 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
原生js实现滑块区间组件
Jan 20 Javascript
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
jQuery dateRangePicker插件使用方法详解
Jul 28 #jQuery
完美实现js拖拽效果 return false用法详解
Jul 28 #Javascript
webpack 2的react开发配置实例代码
Jul 28 #Javascript
基于AngularJS实现表单验证功能
Jul 28 #Javascript
AngularJS service之select下拉菜单效果
Jul 28 #Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 #Javascript
bootstrap datepicker插件默认英文修改为中文
Jul 28 #Javascript
You might like
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
yii框架builder、update、delete使用方法
2014/04/30 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
jQuery实现伪分页的方法分享
2016/02/17 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
python中遍历文件的3个方法
2014/09/02 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
python的pip安装以及使用教程
2018/09/18 Python
python实现感知器算法(批处理)
2019/01/18 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
优纳科技软件测试面试题
2012/05/15 面试题
计算机求职信
2014/07/02 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
保安2014年终工作总结
2014/12/06 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
php修改word的实例方法
2021/11/17 PHP