服务器中,用户的个人数据包含用户名、密码甚至好友关系等等,这些数据直接储存在数据库中即可。但有时,用户数据还包括图片、视频甚至文件,此时应该使用一个单独的服务器用于用户文件的存储与发送。当然,对于web,文件服务器亦用于储存网页文件。
这份服务器代码仅实现了一个简单的文件服务器,接收来自API服务器的请求,储存或发送用户的照片。该服务器没有考虑当存在大量请求时的性能问题,本身对于项目来说亦功能不完善。这两个问题将在后续中一一解决。
该文件服务器使用nodejs实现。若不了解甚至没使用过nodejs可以前去http://nodejs.cn/下载,语法与javascript类似。(博主本身也仅初步接触nodejs,内容中如有不对欢迎 指正)
首先应用express模块与fs模块,这是处理url请求与文件读写必不可少的一部分。如果对这两个模块的使用不熟悉请自行查阅官方文档或一些教程。
var express = require('express');
var fs = require('fs');
var app = express();
该文件服务器逻辑如下,对于uri为/upload的post请求返回一个上传的id;对于uri为/upload/:upload_id的put请求接收上传文件并命名存储;对于uri未/upload/:upload_id的get请求认为该id对应的上传操作已完成,返回这个id对应的上传文件的文件名,该id失效;对于uri为/download/:filename的get请求返回对应的文件。
对于id的合法性判断,可以使用id为键创建数组。此处id初始值为0,每生效一个id就讲id值加1。而对于id对应的文件名,以id为键存在另一个数组中。
var upload_ids = [];
var next_id = 0;
var file_names = [];
app.post('/upload', function (req, res) {
upload_ids[next_id] = true;
res.set("upload_id", (next_id++).toString(