首发于 卡拉云(Kalacloud.com)
Vue + Node.js 搭建「文件上传」管理后台

Vue + Node.js 搭建「文件上传」管理后台

本文完整版《 Vue + Node.js 搭建「文件上传」管理后台》

本教程手把手带领大家搭建一套通过 Vue + Node.js 上传文件的后台系统,只要你跟随本教程一步步走,一定能很好的理解整个前后端上传文件的代码逻辑。前端我们使用 Vue + Axios + Multipart 来搭建前端上传文件应用,后端我们使用 Node.js + Express + Multer 来搭建后端上传文件处理应用。

当然,本教程还会教给大家如何写一个可以限制上传文件大小、有百分比进度条、可报错、可显示服务器上文件列表、可点击下载文件的前端操作界面。

最后完成的上传文件工具后台如下图,跟随本教学习,你也可以搭出来。

vue 搭建文件上传管理工具

如果你对前端不是很熟悉,不想写前端,推荐使用卡拉云搭建后台管理系统,卡拉云是新一代低代码开发工具,不用懂任何前端技术,仅靠鼠标拖拽,即可快速搭建包括「上传文件」在内的任何后台管理工具。立即试用 卡拉云 1 分钟搭建「文件上传」工具。详情见本文文末。

Vue + Node.js「上传文件」前后端项目结构

kalacloud-upload-file-vue-nodejs

Vue 前端部分

Node.js 后端部分

✦ 前端部分 - 上传文件 Vue + Axios + Multipart

配置 Vue 环境

使用 npm 安装 Vue 脚手架 vue-cli

vue-setup

然后我们创建一个 Vue 项目 kalacloud-vue-multiple-files-upload

安装完成后,cd 进入 kalacloud-vue-multiple-files-upload 目录,接下来所有操作都在这个目录之下。

安装 Axios:

我们先跑一下 Vue ,这是 vue 的默认状态

vue-run

我们可以看到浏览器里 Vue 已经在 localhost:8080 跑起来了。

扩展阅读:《 Vue 搭建带预览的「上传图片」管理后台

导入 Bootstrap 到项目中

打开 index.html 把以下代码添加到<head> 中:

文件位置:public/index.html

初始化 Axios HTTP 客户端

在 src 文件夹下,创建 http-common.js 文件,如下所示:

文件位置:src/http-common.js

这里的 baseURL 是你上传文件的后端服务器 REST API 地址,请根据实际情况修改。本教程后文,教你搭建上传文件的后端部分,请继续阅读。

创建「上传文件」功能

我们来写一个 JS 脚本,这个脚本调用 Axios 发送 HTTP API 请求,与后端服务器通讯。

这个脚本包含 2 个功能

文件位置:src/services/UploadFilesService.js

扩展阅读:《 Vue Router 手把手教你搭 Vue3 路由

创建一个 Vue 多文件上传组件

接下来,我们来写一个 Vue 上传组件,这个组件要包含上传文件的所有基本功能,比如 上传按钮、进度条、提示信息、基本 UI 等。

首先,创建一个 Vue 组件模版(UploadFiles.vue)然后把刚刚写好的配置文件(UploadFilesService.js)导入进去。

文件位置:src/components/UploadFiles.vue

然后在这里定义 data() 变量

接下来,我们定义 methodsselectFiles()<input type="file" >中获取选定的文件。

selectedFiles 用来访问当前选定的文件,每个文件都有一个对应的进度条(百分比&文件名)以及被 progressInfos 索引。

我们通过回调 UploadFilesService.upload() 来获得上传信息

我们还需要在mounted() 中添加调用。

现在我们实现上传文件 UI 的 HTML 模板。将以下内容添加到<template>

在上面的代码中,我们使用 Bootstrap 进度条,这里不展开讲了,更多细节可查看 Bootstrap 文档

在 App.vue 中添加「文件上传」组件

打开 App.vue ,在代码中导入 UploadFiles 组件。

给 Vue 上传文件服务配置访问端口

文件位置:src/vue.config.js

运行 Vue 前端部分

到这里,我们已经把 Vue 上传文件的前端部分写完,运行起来看看效果吧。

在 kalacloud-vue-multiple-files-upload 根目录跑一下:

在浏览器打开 http://localhost:8081/ 可以看到前端部分已经完美显示。

vue-uploads-files

文件选择器、上传按钮、文件列表都已经可以显示出来了,但还无法上传。这是因为后端部分还没有跑起来,接下来,我带领大家手把手搭建上传文件的后端部分。

扩展阅读:《 5 款最棒的 Vue UI 移动端组件库 - 特别针对国内使用场景推荐

Vue 前端「上传文件」源码

你可以在我的 github 上下载到完整的 Vue 上传文件 Demo。

当然你也可以不用这么费劲搭建前端做上传文件功能,直接使用 卡拉云,无需懂前后端,简单拖拽即可生成一套属于你自己的后台管理工具。

✦ 后端部分 - 上传文件 Node.js + Express + Multer

前文我们介绍了如何使用 Vue 搭建上传文件管理工具的前端部分,接下来我教大家使用 Node.js + Express + Multer 来搭建一套上传文件的后端 Rest API,提供给 Vue 前端使用,从而实现 Vue 选择文件 + Axios 调用后端 API HTTP 通讯,最后把文件上传到服务器指定目录。

接下来,大家一起跟随本教程创建一套 Node.js 上传文件 Rest API,它的功能包括:

这是存储所有上传文件的静态文件夹:

node-uploads

如果我们 GET 文件列表,Node.js Rest API 会返回:

postman-get

GET /files ,API 返回 文件名 + URL

我们构建的 Node.js Rest API 包含这三个功能:

扩展阅读:《 顶级好用的 5 款 Vue table 表格组件测评与推荐

配置 Node.js 开发环境

在根目录新建 Node.js 的后端文件夹 kalacloud-express-file-upload,接下来所有操作都在这个文件夹中进行。

在 kalacloud-express-file-upload 文件夹根目录安装 Express、Multer、CORS 这三个模块:

package.json 文件:

配置文件上传中间件 Multer

我们使用 Multer 中间件来处理多文件上传,更多 Multer 细节请阅读它的 开发文档

文件位置:src/middleware/upload.js

上面的代码我们做了这么几件事:

扩展阅读:《 最好用的 7 款 Vue admin 后台管理框架测评

使用 Multer 限制文件大小

我们可以使用 Multer API 来限制上传文件大小,添加 limits: { fileSize: maxSize } 以限制文件大小。

创建文件上传 / 下载控制器

在 controller 文件夹中创建 file.controller.js

上传文件:我们使用 upload() 函数

下载文件:

文件位置:src/controller/file.controller.js

如果用户上传文件大小超限的文件应该怎么处理?

扩展阅读:《 手把手教你Vue3+Node.js+Expres+MySQL环境搭建

使用 Multer 处理文件大小超限错误

我们可以通过 catch() 来检查文件超限错误(LIMIT_FILE_SIZE

文件位置:src/controller/file.controller.js

设置后端 Rest API 上传文件的路径

当 Vue 前端通过 Axios 发送 HTTP 请求时,我们需要通过路由来确定服务器应该如何响应

我们来设置三种常用到的上传文件所需功能

我们在 routes 文件夹中创建 index.js 文件:

文件位置:src/routes/index.js

上面这段代码调用了我们前文写的控制器 file.controller.js

扩展阅读:《 最好的 5 款翻译 API 接口对比测评

创建 Express 服务

最后一步,创建 Express 服务,在根目录新建一个 server.js 文件

文件位置:kalacloud-express-file-upload/server.js

导入 expresscors 模块:

扩展阅读:《 如何使 Vue ECharts 柱状图中,每个柱子颜色各不同(随机或指定颜色)

运行后端并测试

首先,在 kalacloud-express-file-upload 根目录执行

把后端服务启动起来。然后我们使用 Postman 来发送 HTTP 请求,看看后端是否运行正常。

接着我们使用 Postman 来测试一下,我们刚刚搭建的后端服务器是否能正常运行

向后端服务器发 POST 请求上传文件

postman-post-update

上传大于最大限制 (2MB) 的文件,500 报错。

postman-post-file-sitz-cannot-be

GET 检索文件信息列表:

postman-get

我们可以使用返回的文件 URL 下载这些文件,例如: http://localhost:8080/files/kalacloud-logo.png

扩展阅读:《 Video.js 使用教程 - 手把手教你基于 Vue 搭建 HTML 5 视频播放器

Vue + Node.js 上传文件前后端一起运行

在 kalacloud-vue-multiple-files-upload 文件夹根目录运行前端 Vue

在 kalacloud-express-file-upload 文件夹根目录运行后端 Node.js

然后打开浏览器输入前端访问网址:

kalacloud-vue-node-upload-file

到这里整个前后端「上传文件」管理工具就搭建完成了。

Node.js 后端「上传文件」源码

你可以在我的 github 上下载到完整的 Node.js 后端「上传文件」源码。

如果你还没搞懂,也不用着急,直接使用卡拉云,无需懂任何前后端技术,仅需简单的鼠标拖拽即可快速生成包括「上传文件」管理在内的任何后台管理工具。 立即试用卡拉云

「上传文件」前后端搭建总结

本教程手把手教大家搭建 Vue 前端 + Node.js 后端 的「文件上传」管理工具,如果你一步步跟着走,一定已经把 Demo 跑起来了。但如果你会使用最新的低代码开发工具「卡拉云」,完全不需要这么繁琐,仅需 1 分钟,就能搭建起属于自己的「文件上传」管理工具。

注册开通 卡拉云,从侧边工具栏直接拖拽组件到页面,生成上传组件和文件管理工具。1 分钟搞定「文件上传」管理工具。

扩展阅读:

代做工资流水公司海口房贷银行流水 费用滁州查背调银行流水长春打印对公账户流水襄阳办理贷款银行流水南京企业对私流水代办孝感消费贷流水株洲工资流水公司包头企业对公流水报价盐城查背调银行流水上海代做自存银行流水苏州对公流水代做济宁企业对公流水遵义入职工资流水开具潮州打印车贷流水铜陵公司流水公司贷款工资流水 公司重庆代开工资流水app截图湖州车贷银行流水 费用滁州企业对私流水厦门打购房银行流水铜陵银行流水修改查询长春工资银行流水报价宁波日常消费流水图片三亚查银行流水PS太原做贷款工资流水贵阳企业银行流水制作淮安代做背调工资流水新乡入职流水打印襄阳制作个人流水天津贷款工资流水 代做香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化