首页 > javascript相关 > vue教程 > 正文

使用iView Upload 组件实现手动上传图片的示例代码_vue.js

2018-11-10 10:00:52

在过去,浏览器是不允许我们读取本地的文件,包括图片。因此,当我们需要预览一个图片的时候,往往先将它传送到服务端,然后服务端返回一个访问 url 地址,达到预览图片的功能。如今,随着标准不断的改善,JavaScript 里的 API 越来越多,我们可以通过直接读取本地文件的方式来加载我们想要看到的文本或者图片,一定程度上减少了服务端的压力。

Upload 组件参考文档:https://www.iviewui.com/components/upload

文档提供的参考代码:

<template>  <div class="demo-upload-list" v-for="item in uploadList">    <template v-if="item.status === 'finished'">      ![](item.url)      <div class="demo-upload-list-cover">        <Icon type="ios-eye-outline" @click.native="handleView(item.name)"></Icon>        <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>      </div>    </template>    <template v-else>      <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>    </template>  </div>  <Upload    ref="upload"    :show-upload-list="false"    :default-file-list="defaultList"    :on-success="handleSuccess"    :format="['jpg','jpeg','png']"    :max-size="2048"    :on-format-error="handleFormatError"    :on-exceeded-size="handleMaxSize"    :before-upload="handleBeforeUpload"    multiple    type="drag"    action="//jsonplaceholder.typicode.com/posts/"    style="display: inline-block;width:58px;">    <div style="width: 58px;height:58px;line-height: 58px;">      <Icon type="camera" size="20"></Icon>    </div>  </Upload>  <Modal title="查看图片" v-model="visible">    ![]('https://o5wwk8baw.qnssl.com/' + imgName + '/large')  </Modal></template><script>  export default {    data () {      return {        defaultList: [          {            'name': 'a42bdcc1178e62b4694c830f028db5c0',            'url': 'https://o5wwk8baw.qnssl.com/a42bdcc1178e62b4694c830f028db5c0/avatar'          },          {            'name': 'bc7521e033abdd1e92222d733590f104',            'url': 'https://o5wwk8baw.qnssl.com/bc7521e033abdd1e92222d733590f104/avatar'          }        ],        imgName: '',        visible: false,        uploadList: []      }    },    methods: {      handleView (name) {        this.imgName = name;        this.visible = true;      },      handleRemove (file) {        // 从 upload 实例删除数据        const fileList = this.$refs.upload.fileList;        this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);      },      handleSuccess (res, file) {        // 因为上传过程为实例,这里模拟添加 url        file.url = 'https://o5wwk8baw.qnssl.com/7eb99afb9d5f317c912f08b5212fd69a/avatar';        file.name = '7eb99afb9d5f317c912f08b5212fd69a';      },      handleFormatError (file) {        this.$Notice.warning({          title: '文件格式不正确',          desc: '文件 ' + file.name + ' 格式不正确,请上传 jpg 或 png 格式的图片。'        });      },      handleMaxSize (file) {        this.$Notice.warning({          title: '超出文件大小限制',          desc: '文件 ' + file.name + ' 太大,不能超过 2M。'        });      },      handleBeforeUpload () {        const check = this.uploadList.length < 5;        if (!check) {          this.$Notice.warning({            title: '最多只能上传 5 张图片。'          });        }        return check;      }    },    mounted () {      this.uploadList = this.$refs.upload.fileList;    }  }</script><style>  .demo-upload-list{    display: inline-block;    width: 60px;    height: 60px;    text-align: center;    line-height: 60px;    border: 1px solid transparent;    border-radius: 4px;    overflow: hidden;    background: #fff;    position: relative;    box-shadow: 0 1px 1px rgba(0,0,0,.2);    margin-right: 4px;  }  .demo-upload-list img{    width: 100%;    height: 100%;  }  .demo-upload-list-cover{    display: none;    position: absolute;    top: 0;    bottom: 0;    left: 0;    right: 0;    background: rgba(0,0,0,.6);  }  .demo-upload-list:hover .demo-upload-list-cover{    display: block;  }  .demo-upload-list-cover i{    color: #fff;    font-size: 20px;    cursor: pointer;    margin: 0 2px;  }</style>

自己实现手动上传:

<template>  <div>    <div class="demo-upload-list" v-for="item in uploadList">      ![](item.url)      <div class="demo-upload-list-cover">        <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>      </div>    </div>    <Upload ref="upload" :show-upload-list="false" :format="['jpg','jpeg','png']" :max-size="2048" :before-upload="handleBeforeUpload" :on-format-error="handleFormatError" :on-exceeded-size="handleMaxSize" type="drag" action="//jsonplaceholder.typicode.com/posts/" style="display: inline-block;width:58px;">      <div style="width: 58px;height:58px;line-height: 58px;">        <Icon type="camera" size="20"></Icon>      </div>    </Upload>  </div></template><script>export default { methods: {  data(){    return {      uploadList: []    }  },  handleBeforeUpload(file) {    // 创建一个 FileReader 对象    let reader = new FileReader()    // readAsDataURL 方法用于读取指定 Blob 或 File 的内容    // 当读操作完成,readyState 变为 DONE,loadend 被触发,此时 result 属性包含数据:URL(以 base64 编码的字符串表示文件的数据)    // 读取文件作为 URL 可访问地址    reader.readAsDataURL(file)    const _this = this    reader.onloadend = function (e) {      file.url = reader.result      _this.uploadList.push(file)    }  },  handleRemove(file) {    this.uploadList.splice(this.uploadList.indexOf(file), 1)  },  handleFormatError(file) {   this.$Notice.warning({    title: '文件格式不正确',    desc: '文件 ' + file.name + ' 格式不正确,请上传 jpg 或 png 格式的图片。'   })  },  handleMaxSize(file) {   this.$Notice.warning({    title: '超出文件大小限制',    desc: '文件 ' + file.name + ' 太大,不能超过 2M。'   })  } }}</script><style scoped>.demo-upload-list {  display: inline-block;  width: 60px;  height: 60px;  text-align: center;  line-height: 60px;  border: 1px solid transparent;  border-radius: 4px;  overflow: hidden;  background: #fff;  position: relative;  box-shadow: 0 1px 1px rgba(0, 0, 0, .2);  margin-right: 4px;}.demo-upload-list img {  width: 100%;  height: 100%;}.demo-upload-list-cover {  display: none;  position: absolute;  top: 0;  bottom: 0;  left: 0;  right: 0;  background: rgba(0, 0, 0, .6);}.demo-upload-list:hover .demo-upload-list-cover {  display: block;}.demo-upload-list-cover i {  color: #fff;  font-size: 20px;  cursor: pointer;  margin: 0 2px;}.ivu-icon {  line-height: 58px;}</style>

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

  • 相关标签:vue教程
  • 本文发布HTML5中文学习网 ,转载请注明出处,感谢您!
  • 相关文章


  • 曝网友假装外国人写投诉信 ofo秒退押金并回函致歉
  • 苹果市值缩水逾2000亿美元 遭多家投行下调目标价
  • Asp.net Core与类库读取配置文件信息的方法_实用技巧
  • asp.net在Repeater嵌套的Repeater中使用复选框详解_实用技巧
  • 利用IIS调试ASP.NET网站程序的完整步骤_实用技巧
  • Asp.Net Core轻松学习系列之配置文件_实用技巧
  • ASP.NET 页生命周期概述(小结)_实用技巧
  • 详解ASP.NET Core WebApi 返回统一格式参数_实用技巧
  • 2018年网络流行语有哪些?2018年十大网络流行语盘点
  • 华为首席财务官孟晚舟被暂扣 深圳市政府要求加方立即放人!
  • 独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    作者信息

    kevin

    永远在学习的路上!

    相关教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 热门教程