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

vue实现发送图片

2026-02-19 15:55:51VUE

vue实现发送图片

使用 Vue 实现发送图片

前端实现(Vue + HTML)

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

    vue实现发送图片

    <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中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue2实现图片懒加载

vue2实现图片懒加载

Vue2 图片懒加载实现方法 使用 Intersection Observer API Intersection Observer API 是浏览器原生支持的懒加载方案,性能较好且无需额外库。 //…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue底部实现

vue底部实现

Vue 底部实现方法 在 Vue 项目中实现底部布局可以通过多种方式完成,以下是一些常见的方法: 使用固定定位 将底部元素固定在页面底部,适用于单页应用或需要始终显示的底部栏。 <temp…