当前位置:首页 > VUE

vue实现图片上传源码

2026-02-23 20:26:54VUE

vue实现图片上传源码

Vue 图片上传实现方法

基础实现(使用原生 input 和 FileReader)

<template>
  <div>
    <input type="file" @change="handleFileChange" accept="image/*">
    <img v-if="imageUrl" :src="imageUrl" alt="Preview" style="max-width: 300px;">
  </div>
</template>

<script>
export default {
  data() {
    return {
      imageUrl: ''
    }
  },
  methods: {
    handleFileChange(e) {
      const file = e.target.files[0]
      if (!file) return

      const reader = new FileReader()
      reader.onload = (e) => {
        this.imageUrl = e.target.result
      }
      reader.readAsDataURL(file)
    }
  }
}
</script>

使用第三方库(如 axios 上传到服务器)

<template>
  <div>
    <input type="file" ref="fileInput" @change="handleFileUpload">
    <button @click="uploadFile">上传</button>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      selectedFile: null
    }
  },
  methods: {
    handleFileUpload() {
      this.selectedFile = this.$refs.fileInput.files[0]
    },
    uploadFile() {
      if (!this.selectedFile) return

      const formData = new FormData()
      formData.append('file', this.selectedFile)

      axios.post('/api/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }).then(response => {
        console.log('上传成功', response.data)
      }).catch(error => {
        console.error('上传失败', error)
      })
    }
  }
}
</script>

使用 Element UI 组件库

<template>
  <el-upload
    action="/api/upload"
    :on-success="handleSuccess"
    :before-upload="beforeUpload">
    <el-button size="small" type="primary">点击上传</el-button>
  </el-upload>
</template>

<script>
export default {
  methods: {
    beforeUpload(file) {
      const isImage = file.type.includes('image/')
      const isLt2M = file.size / 1024 / 1024 < 2

      if (!isImage) {
        this.$message.error('只能上传图片文件')
      }
      if (!isLt2M) {
        this.$message.error('图片大小不能超过 2MB')
      }

      return isImage && isLt2M
    },
    handleSuccess(response, file) {
      this.$message.success('上传成功')
      console.log('文件地址:', response.url)
    }
  }
}
</script>

图片压缩处理

compressImage(file, quality = 0.8) {
  return new Promise((resolve) => {
    const reader = new FileReader()
    reader.readAsDataURL(file)
    reader.onload = (event) => {
      const img = new Image()
      img.src = event.target.result
      img.onload = () => {
        const canvas = document.createElement('canvas')
        const ctx = canvas.getContext('2d')
        const maxWidth = 1024
        const maxHeight = 1024
        let width = img.width
        let height = img.height

        if (width > maxWidth || height > maxHeight) {
          const ratio = Math.min(maxWidth / width, maxHeight / height)
          width *= ratio
          height *= ratio
        }

        canvas.width = width
        canvas.height = height
        ctx.drawImage(img, 0, 0, width, height)

        canvas.toBlob(
          (blob) => resolve(new File([blob], file.name, { type: 'image/jpeg' })),
          'image/jpeg',
          quality
        )
      }
    }
  })
}

多文件上传实现

<template>
  <div>
    <input type="file" multiple @change="handleMultipleFiles">
    <button @click="uploadMultiple">上传多个文件</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      files: []
    }
  },
  methods: {
    handleMultipleFiles(e) {
      this.files = Array.from(e.target.files)
    },
    async uploadMultiple() {
      if (this.files.length === 0) return

      const formData = new FormData()
      this.files.forEach(file => {
        formData.append('files[]', file)
      })

      try {
        const response = await axios.post('/api/upload-multiple', formData)
        console.log('上传成功', response.data)
      } catch (error) {
        console.error('上传失败', error)
      }
    }
  }
}
</script>

vue实现图片上传源码

分享给朋友:

相关文章

vue图片上传实现

vue图片上传实现

图片上传基础实现 使用Vue结合HTML5的<input type="file">元素实现基础图片上传功能。通过FileReaderAPI预览图片,利用FormData对象处理文件数据。…

vue 实现图片上传

vue 实现图片上传

Vue 图片上传实现方法 在 Vue 中实现图片上传可以通过多种方式完成,以下介绍两种常见方法:使用原生 <input type="file"> 结合 FormData,以及使用第三方库如…

vue实现图片上传封面

vue实现图片上传封面

Vue 图片上传封面功能实现 准备工作 确保项目中已安装必要的依赖,如axios用于文件上传请求,element-ui或vant等UI库(可选)。 文件上传组件 创建一个文件上传组件,使用<i…

react源码实现视频

react源码实现视频

以下是关于React源码实现的视频资源推荐,涵盖核心概念、虚拟DOM、Fiber架构等关键内容的讲解: React源码解析视频资源 React Fiber架构深度解析 B站UP主「技术蛋」的系列视频…

css源码制作

css源码制作

CSS 源码制作基础 CSS(层叠样式表)用于控制网页的视觉表现,以下为制作 CSS 源码的核心方法: 文件创建与链接 新建 .css 文件(如 style.css),通过 <link>…

php实现账号切换源码

php实现账号切换源码

PHP实现账号切换功能 实现账号切换功能通常涉及会话管理、用户认证和权限控制。以下是实现账号切换的核心代码示例: 会话管理基础 session_start(); $_SESSION['user_i…