当前位置: 首页 > news >正文

利用nodejs实现图片上传后端,并实现回显

![[Pasted image 20240617093358.png]]
首先准备好前端简单的页面结构

<h1>图片上传</h1>
<img class="img" src="" />
<form action=""><input id="input" type="file" /><button id="btn">上传</button>
</form>

前端上传文件部分:

const input = document.getElementById('input')
const btn = document.getElementById('btn')btn.onclick = function (e) {// 阻止按钮点击提交表单的默认行为e.preventDefault()// 获取上传的文件对象const file = input.files[0]// 创建formData对象const formData = new FormData()// 往formData对象中添加file文件formData.append('file', file)// 创建xhr实例const xhr = new XMLHttpRequest()// 监听xhr的响应xhr.onreadystatechange = function (res) {console.log(res);}// 创建一个xhr请求xhr.open('post', '', true)// 发送xhr请求xhr.send(formData)
}

后端处理文件部分:

const express = require('express')
const cors = require('cors')
const fs = require('fs')
const multiparty = require('multiparty')
const path = require('path')const app = express()
app.use(cors())app.post('/upload', function (req, res) {const form = new multiparty.Form({ uploadDir: './images' })form.parse(req, function (err, fields, files) {const file = files.file[0]const newFilePath = `http://localhost:8080/${file.path}`// 响应文件路径res.json({ img: newFilePath })})
})const port = 3001app.listen(port, () => {console.log('服务器已上线...', port)
})

相关文章:

  • 内存优化技巧:让数据处理更高效
  • 【数据结构】排序(下)
  • 前端基础操作1——利用nvm任意切换(管理)node版本
  • Nuxt快速学习开发 - Nuxt3静态资源Assets
  • Vue3 + Ant-Design 中 a-date-picke 实现选择切换年份 没有鼠标光标,输入框内自带‘年’
  • leetcode27移除元素
  • 无版权图片素材搜索网站,解决无版权图片查找问题
  • 逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
  • [贪心算法]忍者道具
  • Redis精要
  • yolov8训练中出现问题
  • Linux 一键部署 Nginx1.26.1 + ModSecurity3
  • Docker的常见问题
  • LoRa126X系列LoRa模块:专为物联网设计而生
  • adb 截屏和录屏命令
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 11111111
  • CSS实用技巧
  • Java面向对象及其三大特征
  • js
  • JS专题之继承
  • pdf文件如何在线转换为jpg图片
  • tab.js分享及浏览器兼容性问题汇总
  • Vue 2.3、2.4 知识点小结
  • yii2中session跨域名的问题
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 第2章 网络文档
  • 分布式任务队列Celery
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端知识点整理(待续)
  • 写代码的正确姿势
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​第20课 在Android Native开发中加入新的C++类
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #pragma pack(1)
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #职场发展#其他
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (Charles)如何抓取手机http的报文
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (面试必看!)锁策略
  • (十五)使用Nexus创建Maven私服
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)【Hibernate总结系列】使用举例
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .md即markdown文件的基本常用编写语法
  • .naturalWidth 和naturalHeight属性,