node.js使用multer在vue中实现图片上传

效果演示

点击上传选择要上传的图片。
在这里插入图片描述
上传成功会加载图片的缩略图。
在这里插入图片描述
此时,图片以保存在后端的静态目录中。

在这里插入图片描述

设计思路

vue中使用input标签上传图片,绑定@change事件,事件负责把图片发送给后端,后端通过multer模块处理前端传来的图片并返回状态码、信息和后端保存的图片的url。

前端设计

如果Ufile里有内容则显示上传的图片,没有则显示点击上传。

<div class="addImage"><input type="file" class="file" id="file" @change="HandelFile($event)" accept="image/*"><label for="file" class="filebox" v-if="'' == Ufile"><span>+</span><p>点击上传</p></label><label for="file" class="imgbox" v-if="'' !== Ufile"><img :src="imgUrl" alt=""></label>
</div>

css

addImage{margin: 10px 10px;display: inline-block;width: 160px;height: 125px;border: 1px dashed darkgray;background: #f8f8f8;position: relative;overflow: hidden;cursor: pointer;.file{position: absolute;top: 0;left: 0;width: 160px;height: 125px;opacity: 0;}.filebox,.imgbox{width: 160px;height: 125px;display: flex;justify-content: center;align-items: center;flex-direction: column;text-align: center;span{font-size: 40px;}}
}

选择完图片后会触发HandelFile()图片上传方法,该方法把选择的图片发送给后端,图片是event.target.files[0]里的内容。把图片文件添加到创建的formdata对象中,将数据编译成键值对,以便用XMLHttpRequest来发送数据。
event.target.files[0]里的内容

HandelFile(event){this.Ufile = event.target.files[0];//创建一个formdata对象let formData = new FormData();//将文件添加到formdata对象中formData.append("ile",this.Ufile);axios.post('http://localhost:3000/upload',formData).then(res=>{this.imgUrl = res.data.url;});}

后端设计

安装multer模块

npm i multer

导入要用到的模块

const express = require("express");
const router = express.Router();
const multer = require("multer");

控制multer文件存储方式,destination是设置文件的保存路径,filename是重命名文件的名称。这里设置保存路径为静态目录public里的upload文件夹,文件名为时间戳+文件原名。

var storage = multer.diskStorage({destination: function (req, file, cb) {cb(null, './public/upload');},filename: function (req, file, cb) {cb(null,`${Date.now()}-${file.originalname}`);}
});
const upload = multer({storage:storage});

方法中的file对象包含有以下信息:

key描述
fieldnamemulter帮你生成的文件名
originalname文件原名
encoding文件的编码类型
mimetype文件的 Mime 类型
size文件大小(以字节为单位)

路由主体,前端请求携带过来的信息会经过upload.any()这个方法处理,下面图片是处理后req.file的内容。
在这里插入图片描述

router.post('/', upload.any(),(req,res)=>{let url = `http://localhost:3000/upload/${req.files[0].filename}`;if(!req.files){return res.json({status:204,message:"没有上传文件"})}else{return res.json({status:200,message:"上传成功",url: url})}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/486819.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven depoly:Skipping artifact deployment

问题描述&#xff1a; 使用IDEA执行mvn depoly将本地开发的模块发布到Maven私服时&#xff0c;一直提示&#xff1a;Skipping artifact deployment&#xff0c;自动跳过了depoly部署阶段。 问题分析 Maven构建生命周期中的每一个阶段都是由对应的maven插件执行具体工作的。既然…

实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)

实验室预约小程序目录 目录 基于微信小程序的实验室预约管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;管理员登录 &#xff08;2&#xff09;实验室管理 &#xff08;3&#xff09;公告信息…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

荧光淬灭剂Tide Quencher 2酸,Tide Quencher 2 acid ,能够与荧光物质发生反应

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;荧光淬灭剂Tide Quencher 2酸&#xff0c;Tide Quencher 2 acid &#xff0c;TQ2 acid 一、基本信息 产品简介&#xff1a;Tide Quencher 2 acid is highly favored in the field of scientific experiments due to…

ZS Associates致盛咨询是什么公司?排名怎么样?

随着商业化时代的加速演进&#xff0c;咨询公司在企业发展中的“智囊团”角色愈发突显。对于医药企业来说&#xff0c;一个优秀的咨询团队不仅可以帮助推动整体战略转型及内部改革&#xff0c;还对药品研发、营销起到优化促进作用。 那什么样的咨询企业可称之为优秀的咨询企业…

内容检索(2024.02.23)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 电磁兼容理论与实…

网络安全-nc(Netcat)工具详解

经常在反弹shell的时候使用nc命令&#xff0c;但是从来没有了解过&#xff0c;今天翻书看到了&#xff0c;准备记录一下。 nc全称Netcat&#xff0c;是TCP/IP连接的瑞士军刀。哈哈我最喜欢瑞士军刀了。 有一个比较偏的知识点&#xff0c;nc还可以探测目标的端口是否开放&…

3.测试教程 - 基础篇

文章目录 软件测试的生命周期软件测试&软件开发生命周期如何描述一个bug如何定义bug的级别bug的生命周期如何开始第一次测试测试的执行和BUG管理产生争执怎么办&#xff08;处理人际关系&#xff09; 大家好&#xff0c;我是晓星航。今天为大家带来的是 测试基础 相关的讲解…

美团面试:说说Java OOM的三大场景和解决方案?

美团面试&#xff1a;说说Java OOM的场景和解决方案&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&…

【前端素材】推荐优质后台管理系统Xoric平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 功能层次 a. 用户管理功能&#xff1a; 用户注册和登录&#xff1a;管理用户账户的注册和登录过程。权限管…

Translumo:基于.NET开发的开源的屏幕实时翻译工具

推荐一个高级实时屏幕翻译器&#xff0c;可用于游戏、视频实时翻译。 01 项目简介 Translumo是基于.Net开发的、开源屏幕翻译器软件&#xff0c;它可以实时检测并翻译屏幕上所选区域中出现的文本&#xff0c;如视频的字幕和图片中的文字等。 项目架构如下&#xff1a; 02 项…

安全生产:AI视频智能分析网关V4如何应用在企业安全生产场景中?

随着科技的不断进步&#xff0c;视频智能分析技术在安全生产领域中的应用越来越广泛。这种技术通过计算机视觉和人工智能算法&#xff0c;可以对监控视频进行自动分析和处理&#xff0c;以实现多种功能&#xff0c;如目标检测、行为识别、异常预警等。今天我们以TSINGSEE青犀AI…