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

yizhihongxing

下面是利用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日

相关文章

  • 教你如何开发Vite3插件构建Electron开发环境

    下面是教你如何开发Vite3插件构建Electron开发环境的完整攻略。 1. 了解Vite3插件 Vite3是一个由Vue.js核心团队开发的新一代前端构建工具。相比于Webpack,Vite3的最大特点是快速的打包速度和热更新功能。为了扩展Vite3的功能,我们可以开发自己的Vite3插件。 一个Vite3插件是一个JavaScript模块,其输出是一个…

    Vue 2023年5月28日
    00
  • vue中$set用法详解

    下面我将为你详细介绍“vue中$set用法详解”。 什么是$set $set是Vue.js提供的一个全局API,用于向响应式对象中添加一个属性,并确保这个新属性也是响应式的。这个全局API的使用方式如下: Vue.set(target, key, value) 其中,target表示目标对象,key表示需要添加的属性名,value则表示需要添加的属性的值。 …

    Vue 2023年5月29日
    00
  • 构建Vue3桌面应用程序的方法

    构建Vue3桌面应用程序的方法可以分为以下几个步骤: 1. 安装 Vue CLI Vue CLI 是一个官方提供的脚手架工具,可以帮助我们快速创建 Vue.js 项目。可以通过以下命令进行安装: npm install -g @vue/cli # OR yarn global add @vue/cli 2. 创建 Vue 项目 在命令行中执行以下命令来创建一…

    Vue 2023年5月27日
    00
  • vue整合项目中百度API示例详解

    下面是“Vue整合项目中百度API示例详解”的完整攻略。 1. 前置条件 在使用百度API之前,需要去百度地图开放平台创建应用,并获取到对应的AK(Access Key)。 2. 引入百度地图API 为了使用百度地图API,我们需要先在项目中引入相应的JS文件。以下是示例代码: <!– 引入百度地图API –> <script type…

    Vue 2023年5月27日
    00
  • Vue3 + TypeScript 开发总结

    下面我将分享一下“Vue3 + TypeScript 开发总结”的完整攻略,主要包括以下几个部分: 项目初始化与配置 TypeScript 基础知识回顾 Vue3 中 TypeScrip 的应用实践 示例说明 首先,我们需要进行项目初始化和配置。在初始化项目时,我们需要在命令行中输入以下代码: vue create my-project 随后,我们可以根据实…

    Vue 2023年5月28日
    00
  • Java超详细大文件分片上传代码

    对于Java超详细大文件分片上传的攻略,我们可以从以下几个步骤进行讲解: 1.了解分片上传的原理 分片上传是将一个大文件分割为多个小文件进行上传,这样能够减少单次上传的数据量,降低上传失败的概率,同时也能够保证上传的效率和速度。 2.准备分片上传所需的工具和编码环境 开发分片上传所需的工具主要有Java开发环境、Maven构建工具以及SpringBoot框架…

    Vue 2023年5月28日
    00
  • Vue中金额、日期格式化插件@formatjs/intl的使用及说明

    Vue中金额、日期格式化插件@formatjs/intl的使用及说明 简介 @formatjs/intl 是一个用于处理数字、日期、货币等多种格式化需求的插件。可以在 Vue 中方便地使用它来对各种格式进行处理。 安装 在项目中安装@formatjs/intl: npm install @formatjs/intl 同时,需要安装@formatjs/intl…

    Vue 2023年5月27日
    00
  • Vue路由router详解

    Vue路由router详解 什么是路由 路由指的是根据不同的URL地址展示不同的页面内容,Vue Router是Vue.js官方的路由管理器。使用Vue Router可以很方便地实现单页面应用程序(SPA)中的多视图管理。 安装 安装Vue Router很简单,在Vue CLI中提供了预设的脚手架模板供使用者选择,其中就包括了Vue Router功能。 步骤…

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