构建简易版的文件服务器
为什么会有这样的一个需要,当你在公司内网环境,想分享或者服务器获取文件时,经常会由于公司邮件发送附件大小限制,各服务器墙不通,上传文件到服务器困难等问题,这个时候有一个简单版的文件存储服务器作为中间桥梁,帮忙上传、分享文件岂不非常爽歪歪,一般大公司都有公司内部的网盘,但需要申请账号、开通权限等等,也是很麻烦。
开始
1.明确需求
进行开发前需要首先明确需求,确定用户操作流程:
2.开发前的准备
2.1 导入依赖模块
由于需要搭建node接口服务,处理multipart/form-data类型的表单数据,因此至少需要以下几个模块:
-
Express (保持最小规模的灵活的Node.js Web应用程序开发框架,为Web和移动应用程序提供一组强大的功能)
-
Multer (Multer是一个node.js中间件,用于处理multipart/form-data类型的表单数据,它主要用于上传文件)
注:Multer不会处理任何非multipart/form-data类型的表单数据
3.功能实现
3.1 可视化form表单界面
<form style="text-align: center;" action="/ishare/profile" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
<button type="submit">submit</button>
</form>
需要一个可视化界面,用于让用户更方便的选择文件进行上传。
3.2 搭建node接口服务
const express = require('express')
const app = express()
const multer = require('multer')
const upload = multer({dest : 'web'})
app.use(express.static('web')) // express.static()为了提供对静态资源文件(图片、css文件、javascript文件)的服务,请使用Express内置的中间函数express.static.
// express会在静态资源目录下查找文件,所以不需求把静态目录web作为url的一部分。可以直接加载web目录下的文件:
// 可以多次使用express.static中间件来添加多个静态资源目录。
app.post('/profile', upload.single('avatar'), function (req, res, next) {
let file = req.file
res.send({'respCode':'000000','uploaded': file.path})
});
app.listen(8082,()=> {
console.log("app listerening on 8082")
});
3.3 通过nginx代理请求地址到/profile接口
nginx配置如下:
upstream iFileServer {
server 29.2.221.177:8082
}
location /ishare/ {
proxy_pass http://iFileServer/
}
至此完成了迷你版的文件服务器存储系统。