构建简易版的文件服务器

806 阅读2分钟

构建简易版的文件服务器

为什么会有这样的一个需要,当你在公司内网环境,想分享或者服务器获取文件时,经常会由于公司邮件发送附件大小限制,各服务器墙不通,上传文件到服务器困难等问题,这个时候有一个简单版的文件存储服务器作为中间桥梁,帮忙上传、分享文件岂不非常爽歪歪,一般大公司都有公司内部的网盘,但需要申请账号、开通权限等等,也是很麻烦。

开始

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/
}

至此完成了迷你版的文件服务器存储系统。

当用户调用http://29.2.221.176/ishare/profile时,通过nginx转发到29.2.221.177:8082/profile这个接口,将用户上传的文件上传到/profile接口服务的web目录下。