Vue2.0利用vue-resource上传文件到七牛的实例代码

下面是利用Vue2.0和vue-resource上传文件到七牛的实例代码的完整攻略。

安装vue-resource

首先,我们需要安装vue-resource。你可以在项目根目录运行以下命令安装:

npm install vue-resource --save

配置七牛

首先,你需要在七牛上创建一个存储空间,然后配置访问密钥和域名。你可以在 七牛开发者中心 中找到这些信息。

HTML部分

在HTML部分,你需要添加一个input元素,用于选择文件:

<input type="file" ref="uploadInput" @change="handleUpload">

并且你还需要添加一个button元素,用于上传文件:

<button type="button" @click="upload">上传</button>

Vue组件部分

首先,你需要在Vue组件的data中添加七牛的设置信息:

data () {
  return {
    qiniu: {
      url: 'https://upload.qiniup.com', // 七牛上传地址
      bucket: 'my-bucket-name', // 空间名
      AK: 'my-access-key', // AK
      SK: 'my-secret-key', // SK
      domain: 'http://example.com/' // 域名
    }
  }
}

然后,你需要实现一个方法,用于获取token:

getQiniuToken () {
  const url = 'your-token-api-url'
  // 通过axios获取token
  return axios.get(url)
  .then(res => {
    return res.data.token // 这里返回的是你从token接口返回的token字段
  })
}

接着,你需要实现一个方法,用于处理上传的文件:

handleUpload () {
  this.file = this.$refs.uploadInput.files[0]
},

然后,你需要实现上传方法:

upload () {
  const file = this.file
  if (!file) {
    this.$message.error('请选择图片')
    return
  }
  // 获取token
  this.getQiniuToken().then(token => {
    const formData = new FormData()
    formData.append('file', file)
    formData.append('token', token)
    // 文件上传
    this.$http.post(this.qiniu.url, formData, {
      headers: {'Content-Type': 'multipart/form-data'}
    }).then(response => {
      console.log('上传成功:', response.body)
      this.imageUrl = this.qiniu.domain + response.body.hash
    }, response => {
      console.log('上传失败:', response.message)
    })
  }, error => {
    console.log('获取Token失败:', error)
  })
}

示例

下面是两个基于该代码的示例:

示例1

该示例显示了如何在一个Vue组件中上传文件:

<template>
  <div>
    <input type="file" ref="uploadInput" @change="handleUpload">
    <button type="button" @click="upload">上传</button>
    <div>
      <img :src="imageUrl" alt="">
    </div>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  data () {
    return {
      imageUrl: '',
      file: null,
      qiniu: {
        url: 'https://upload.qiniup.com', // 七牛上传地址
        bucket: 'my-bucket-name', // 空间名
        AK: 'my-access-key', // AK
        SK: 'my-secret-key', // SK
        domain: 'http://example.com/' // 域名
      }
    }
  },
  methods: {
    getQiniuToken () {
      const url = 'your-token-api-url'
      // 通过axios获取token
      return axios.get(url)
      .then(res => {
        return res.data.token // 这里返回的是你从token接口返回的token字段
      })
    },
    handleUpload () {
      this.file = this.$refs.uploadInput.files[0]
    },
    upload () {
      const file = this.file
      if (!file) {
        this.$message.error('请选择图片')
        return
      }
      // 获取token
      this.getQiniuToken().then(token => {
        const formData = new FormData()
        formData.append('file', file)
        formData.append('token', token)
        // 文件上传
        this.$http.post(this.qiniu.url, formData, {
          headers: {'Content-Type': 'multipart/form-data'}
        }).then(response => {
          console.log('上传成功:', response.body)
          this.imageUrl = this.qiniu.domain + response.body.hash
        }, response => {
          console.log('上传失败:', response.message)
        })
      }, error => {
        console.log('获取Token失败:', error)
      })
    }
  }
}
</script>

示例2

该示例显示了如何在一个原生JavaScript中使用该代码上传文件:

<template>
  <div>
    <input type="file" ref="uploadInput" @change="handleUpload">
    <button type="button" @click="upload">上传</button>
    <div>
      <img :src="imageUrl" alt="">
    </div>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  data () {
    return {
      imageUrl: '',
      file: null,
      qiniu: {
        url: 'https://upload.qiniup.com', // 七牛上传地址
        bucket: 'my-bucket-name', // 空间名
        AK: 'my-access-key', // AK
        SK: 'my-secret-key', // SK
        domain: 'http://example.com/' // 域名
      }
    }
  },
  methods: {
    getQiniuToken () {
      const url = 'your-token-api-url'
      // 通过axios获取token
      return axios.get(url)
      .then(res => {
        return res.data.token // 这里返回的是你从token接口返回的token字段
      })
    },
    handleUpload () {
      this.file = this.$refs.uploadInput.files[0]
    },
    upload () {
      const file = this.file
      if (!file) {
        alert('请选择图片')
        return
      }
      // 获取token
      this.getQiniuToken().then(token => {
        const formData = new FormData()
        formData.append('file', file)
        formData.append('token', token)
        // 文件上传
        const xhr = new XMLHttpRequest()
        xhr.open('POST', this.qiniu.url, true)
        xhr.setRequestHeader('Content-Type', 'multipart/form-data')
        xhr.upload.onprogress = (event) => {
          if (event.lengthComputable) {
            const percent = Math.round((event.loaded / event.total) * 100)
            console.log(上传进度:${percent}%)
          }
        }
        xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
            if (xhr.status === 200) {
              const result = JSON.parse(xhr.responseText)
              console.log('上传成功:', result)
              this.imageUrl = this.qiniu.domain + result.hash
            } else {
              console.log('上传失败: ', xhr.statusText)
            }
          }
        }
        xhr.send(formData)
      }, error => {
        console.log('获取Token失败:', error)
      })
    }
  }
}
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue2.0利用vue-resource上传文件到七牛的实例代码 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 在 Vue 中控制表单输入方法详解

    让我为您详细解释如何在Vue中控制表单输入。 1. 控制表单输入 在Vue中,表单输入可以双向绑定数据,使用 v-model 指令可以轻松实现。 1.1 普通表单元素 对于普通的表单元素,例如输入框和选择框,你可以使用 v-model 指令将其值与Vue组件的data进行绑定。在数据更新时,输入框会自动更新。 下面是一个示例: <template&gt…

    Vue 2023年5月27日
    00
  • 利用Vue的v-for和v-bind实现列表颜色切换

    下面是利用Vue的v-for和v-bind实现列表颜色切换的完整攻略。 1. 简介 v-for和v-bind是Vue中两条非常常用的指令。其中,v-for用于循环渲染一组数据,v-bind则是将数据绑定到HTML元素的属性上,可以让我们实现一些动态的效果。本攻略将通过v-for和v-bind的配合实现一个列表的颜色切换效果。 2. 实现步骤 2.1 新建Vu…

    Vue 2023年5月27日
    00
  • vue打包之后生成一个配置文件修改接口的方法

    下面我给您详细讲解一下”vue打包之后生成一个配置文件修改接口的方法”的完整攻略。 1. 生成配置文件 首先,我们需要在打包完成后生成一个配置文件,这样我们才能对配置文件进行修改。我们可以通过使用Node.js的fs模块来实现。 const fs = require(‘fs’) const path = require(‘path’) // 打包完成后需执行…

    Vue 2023年5月28日
    00
  • vue3.2中的vuex使用详解

    下面是关于vue3.2中的vuex使用详解的完整攻略。 1. 什么是Vuex Vuex是Vue.js应用程序的状态管理模式。它通过一个集中的存储管理所有组件的状态,并以相应的规则保证状态以可预测的方式发生变化。 2. 如何使用Vuex 2.1 安装Vuex 在vue项目中使用Vuex,需要先安装Vuex。使用npm安装: npm install vuex -…

    Vue 2023年5月27日
    00
  • npm install安装报错的几种常见情况

    以下是关于npm install安装报错的几种常见情况的攻略。 1. 版本兼容问题 当我们使用 npm install 安装依赖时,npm 会尝试找到最新或符合版本约束的依赖版本,并自动安装。但是,有时候我们会遇到版本兼容问题而导致安装报错。比如: ERROR: Failed to download Chromium r818858! Set "P…

    Vue 2023年5月28日
    00
  • Vue CLI 3.x 自动部署项目至服务器的方法

    这里我为大家讲解如何使用Vue CLI 3.x自动部署项目至服务器的详细步骤。 什么是Vue CLI 3.x自动部署? Vue CLI 3.x自动部署是指通过Vue CLI 3.x提供的自动化工具,将项目自动部署到远程服务器上。使用起来相当方便快捷,可以极大地提高团队的开发效率。 准备工作 在使用Vue CLI 3.x自动部署功能之前,需要先安装好以下软件:…

    Vue 2023年5月28日
    00
  • vue 使用el-table循环生成表格的过程

    下面我将详细讲解使用 Vue 和 el-table 循环生成表格的完整攻略。该过程可以分为以下几个步骤: 引入必须的依赖 首先,需要在你的代码中引入必须的依赖,这包括 Vue 框架及其 Element-UI 组件库。 <!– index.html –> <!– 引入 Vue 和 Element-UI–> … <scr…

    Vue 2023年5月28日
    00
  • Vue 中指令v-bind动态绑定及与v-for结合使用详解

    让我详细讲解一下“Vue 中指令v-bind动态绑定及与v-for结合使用详解”,包含两条示例说明。 一、Vue 中指令v-bind动态绑定 在 Vue 中,通过指令 v-bind 可以将动态表达式绑定到 HTML 属性上。 例如,我们可以通过 v-bind 将 href 属性与 url 变量绑定起来,实现动态跳转链接。代码示例如下: <templat…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部