当前位置:首页 > VUE

vue 实现图片上传demo

2026-02-24 16:08:51VUE

安装依赖

确保项目中已安装axios用于文件上传请求,若未安装可通过以下命令安装:

npm install axios

前端组件实现

创建图片上传组件ImageUpload.vue,包含文件选择、预览和上传功能:

<template>
  <div>
    <input type="file" @change="handleFileChange" accept="image/*" />
    <img v-if="previewUrl" :src="previewUrl" width="200" />
    <button @click="uploadImage" :disabled="!file">Upload</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      file: null,
      previewUrl: ''
    };
  },
  methods: {
    handleFileChange(event) {
      this.file = event.target.files[0];
      this.previewUrl = URL.createObjectURL(this.file);
    },
    async uploadImage() {
      const formData = new FormData();
      formData.append('image', this.file);

      try {
        const response = await axios.post('/api/upload', formData, {
          headers: {
            'Content-Type': 'multipart/form-data'
          }
        });
        console.log('Upload success:', response.data);
      } catch (error) {
        console.error('Upload failed:', error);
      }
    }
  }
};
</script>

后端接口示例(Node.js)

创建简单的Express服务端接口处理上传:

vue 实现图片上传demo

const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('image'), (req, res) => {
  console.log('File received:', req.file);
  res.json({ message: 'File uploaded successfully' });
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

跨域处理

若前后端分离开发,需配置代理或CORS。在vue.config.js中添加:

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true
      }
    }
  }
};

文件大小限制

可在前端和后端分别设置限制: 前端验证文件大小:

vue 实现图片上传demo

handleFileChange(event) {
  const maxSize = 5 * 1024 * 1024; // 5MB
  if (event.target.files[0].size > maxSize) {
    alert('File too large');
    return;
  }
  // ...其余代码
}

后端限制(使用multer):

const upload = multer({
  dest: 'uploads/',
  limits: { fileSize: 5 * 1024 * 1024 }
});

进度显示

通过axios的onUploadProgress实现上传进度条:

uploadImage() {
  const config = {
    headers: { 'Content-Type': 'multipart/form-data' },
    onUploadProgress: progressEvent => {
      const percent = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      );
      console.log(`${percent}% uploaded`);
    }
  };
  axios.post('/api/upload', formData, config);
}

标签: 图片上传vue
分享给朋友:

相关文章

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue实现单据

vue实现单据

Vue 实现单据功能的方法 使用 Vue 实现单据功能通常涉及表单设计、数据绑定、验证和提交等环节。以下是具体实现方案: 表单设计与数据绑定 使用 Vue 的 v-model 指令实现表单数据的双向…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…

vue 实现音乐

vue 实现音乐

Vue 实现音乐播放功能 在 Vue 中实现音乐播放功能,可以通过 HTML5 的 <audio> 元素或第三方库如 howler.js 来实现。以下是两种方法的详细步骤: 使用 HTM…