千家信息网

怎么用nodejs搭建一个图片上传网站

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要讲解了"怎么用nodejs搭建一个图片上传网站",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用nodejs搭建一个图片上传网站"吧!效
千家信息网最后更新 2025年01月18日怎么用nodejs搭建一个图片上传网站

这篇文章主要讲解了"怎么用nodejs搭建一个图片上传网站",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用nodejs搭建一个图片上传网站"吧!

效果如图:

点击上传后,会把文件放到后台一个uploads文件夹下面,如果上传成功,那么页面会 弹出一个上传成功的提示框,如果上传失败,会弹出一个失败的提示框,如果网速比较慢,会显示出上传过程中的进度条。

开发准备

用普通的表单提交方法实现文件上传。

1.编写前端代码

  • 设置action为提交地址, enctype="multipart/form-data"

  • 设置提交文件表单域名为 imgfile

2.编写后端测试用代码

  • 这里我们采用了express框架,需要先安装这个框架,然后使用静态中间件指定放置我们js css html 文件的目录

var app = express(); app.use(express.static('dist'))

下载处理上传文件的插件 multer

  • 在readme.md文件中有基本的使用方法,我们复制过来代码实例稍微改改就可以使用了。把文件上传路径指定到uploads,然后用当前日期和文件名命名上传过来的文件。这个imgfile域名必须严格和前端表单文件域名对应起来。

完整代码如下:

"use strict"; exports.__esModule = true; var express = require("express"); var multer = require("multer"); var storage = multer.diskStorage({     destination: function(req, file, cb) {         cb(null, './uploads');     },     filename: function(req, file, cb) {         cb(null, `${Date.now()}-${file.originalname}`)     } }) var upload = multer({ storage: storage }); var app = express(); app.use(express.static('dist')); //var cpUpload = upload.fields([{ name: 'imgfile', maxCount: 12 }]) app.post('/uploadimg', upload.array('imgfile', 40), function(req, res, next) {     var files = req.files     console.log(files)     if (!files[0]) {         res.send('error');     } else {         res.send('success');     }        console.log(files); })  var server = app.listen(9999, 'localhost', function() {     console.log('server is running at port 9999...'); });

这样选择文件,点击提交按钮后文件就被上传到了服务器uploads文件夹下

用H5和ajax技术实现无刷新文件上传

1.改造原来的选择文件按钮,让它变成一个可爱的小图标,点击后选择文件。

这个过于简单就不放代码了,具体思路是把一个a标签放上背景图片,把上传文件 input type="file" 大小设置成a标签一样大,并且放置到a标签上面,opacity设置成0透明的。点击a实际上是点击了 input type="file"

2.选取文件后生成缩略图,这个基本思路是监听 input type="file" 的onchange事件,如果选了文件就利用FileReader生成一个图片data:url添加到div.preview里面动态生成的img上,给div.preview设置成flex布局就可以灵活放置预览图了。

html

js

fileinput.onchange = () => {             //console.log('dddd')             var files = fileinput.files             let imgDOMArray = new Array(files.length)             let reader = []             let thumbPic = []             progressDOM = document.getElementById('progress-img')             for (let i = 0; i < files.length; i++) {                 reader[i] = new FileReader()                 thumbPic[i] = document.createElement('div')                 imgDOMArray[i] = document.createElement('img')                 imgDOMArray[i].file = files[i]                 thumbPic[i].className = 'thumbPic'                 thumbPic[i].appendChild(imgDOMArray[i])                 previewDOM.appendChild(thumbPic[i])                 reader[i].readAsDataURL(files[i])                 reader[i].onload = (img => {                      return e =>img.src = e.target.result                                      })(imgDOMArray[i])              }         }

3.点击上传按钮上传图片

这个基本思路就是利用Formdata模拟表单,然后用ajax发送文件到服务器

var aUpload = document.querySelector('.selectImg')         var button = document.querySelector('#upload')         var fileinput = document.getElementById('file')         button.onclick = uploadFile          function uploadFile() {             //  console.log('ddd')             var xhr = new XMLHttpRequest()             var formdata = new FormData()              var files = fileinput.files             if (!files[0]) {                 alert('请先选择图片,再上传!')                 return             }              var progress = document.querySelector('progress')             for (let i = 0; i < files.length; i++) {                 formdata.append('imgfile', files[i], files[i].name)             }             xhr.open('POST', '/uploadimg')             xhr.onload = () => {                 if (xhr.status === 200 && xhr.responseText === 'success') {                     previewDOM[xss_clean] = ''                     xhr = null                     alert('图片上传成功!')                 }             }             xhr.send(formdata)             xhr.upload.onprogress = e => {                 if (e.lengthComputable) {                     var progressWrap = document.querySelector('.progress')                     progressWrap.style.display = "flex"                     var percentComplete = e.loaded / e.total * 100                     progress.value = percentComplete                      if (percentComplete >= 100) {                         progress.value = 0                         progressWrap.style.display = "none"                     }                 }             }          }

其中利用了xhr.upload.onprogress监听数据上传事件,并且动态设置h6进度条的value显示上传进度。如果上传完成,隐藏进度条。

如果服务器返回的是success,就弹出上传图片成功。否则弹出上传图片失败。

感谢各位的阅读,以上就是"怎么用nodejs搭建一个图片上传网站"的内容了,经过本文的学习后,相信大家对怎么用nodejs搭建一个图片上传网站这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 图片 代码 网站 成功 思路 表单 进度 选择 按钮 服务器 标签 学习 服务 事件 内容 前端 动态 域名 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 rtx 服务器下载 运维属于网络安全吗 网络安全建设重点任务责任清单 档案软件原服务器容量410g 金苗系统在电脑上无法连接数据库 视频软件开发用到什么技术 军队网络安全心得体会300字 国服lol服务器哪个最大 触摸屏软件开发用什么 学软件开发可以考什么证 安卓系统硬件检测软件开发 传感网络技术的应用 dba怎么保障数据库安全性 客户端与服务器的交互用什么图 与生活息息相关的网络安全知识 如何改变数据库字符集 山南市政府网络安全 奶块手游炼金服务器怎么样 广电网络技术笔试题 poklng服务器 股票软件开发windows 魔兽世界 北京服务器 贵州云服务器散热器生产虚拟主机 阿里云服务器root 武汉李凯网络安全 服务器四个硬盘阵列 上海环境监测软件开发价格 电脑访问内部服务器速度不一样 广东警官学院网络安全与执法代码 惠州金融软件开发市场价
0