选择图片,利用 FileReader 实现本地预览: &l…">
当前位置:首页 > VUE

vue实现发送图片

2026-02-19 15:55:51VUE

使用 Vue 实现发送图片

前端实现(Vue + HTML)

  1. 文件选择与预览
    通过 <input type="file"> 选择图片,利用 FileReader 实现本地预览:

    <template>
      <div>
        <input type="file" accept="image/*" @change="handleFileChange" />
        <img v-if="previewUrl" :src="previewUrl" width="200" />
        <button @click="uploadImage">发送图片</button>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          selectedFile: null,
          previewUrl: "",
        };
      },
      methods: {
        handleFileChange(event) {
          const file = event.target.files[0];
          if (file) {
            this.selectedFile = file;
            this.previewUrl = URL.createObjectURL(file);
          }
        },
        async uploadImage() {
          if (!this.selectedFile) return;
          const formData = new FormData();
          formData.append("image", this.selectedFile);
          try {
            const response = await axios.post("/api/upload", formData, {
              headers: { "Content-Type": "multipart/form-data" },
            });
            console.log("发送成功:", response.data);
          } catch (error) {
            console.error("发送失败:", error);
          }
        },
      },
    };
    </script>

后端处理(Node.js 示例)

  1. 接收并保存图片
    使用 multer 中间件处理文件上传:

    const express = require("express");
    const multer = require("multer");
    const path = require("path");
    
    const app = express();
    const upload = multer({ dest: "uploads/" });
    
    app.post("/api/upload", upload.single("image"), (req, res) => {
      if (!req.file) {
        return res.status(400).send("未上传文件");
      }
      res.json({
        url: `/uploads/${req.file.filename}`,
        originalname: req.file.originalname,
      });
    });
    
    app.listen(3000, () => console.log("服务器已启动"));

优化与扩展

  1. 图片压缩与校验
    • 前端校验文件类型和大小:
      handleFileChange(event) {
        const file = event.target.files[0];
        if (!file.type.startsWith("image/")) {
          alert("请选择图片文件");
          return;
        }
        if (file.size > 5 * 1024 * 1024) {
          alert("图片大小不能超过5MB");
          return;
        }
        this.selectedFile = file;
      }
    • 后端使用 sharp 压缩图片:
      const sharp = require("sharp");
      app.post("/api/upload", upload.single("image"), async (req, res) => {
        await sharp(req.file.path)
          .resize(800)
          .toFile(`uploads/compressed_${req.file.filename}`);
      });

实时显示图片

  1. 通过 WebSocket 推送
    结合 Socket.IO 实现实时更新:
    // 前端接收
    import io from "socket.io-client";
    const socket = io("http://localhost:3000");
    socket.on("newImage", (data) => {
      console.log("收到新图片:", data.url);
    });
    // 后端推送
    const server = require("http").createServer(app);
    const io = require("socket.io")(server);
    io.on("connection", (socket) => {
      socket.emit("newImage", { url: "/uploads/image.jpg" });
    });

vue实现发送图片

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

相关文章

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: &l…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…