Nodejs初试水Node + Backbone + Redis —— 公众便所
Nodejs初试水Node + Backbone + Redis —— 公众便所
这就是公众便所!噗,口误,是公众档所。
出去打印店或者什么的时候的临时储存盘。上传之后就得到提取码,直接拿到打印店什么的去就OK了。文件保留七天(还没写这个守护进程)。
项目地址:https://github.com/XadillaX/public-file-house
demo地址:http://dang.kacaka.ca/
嘛嘛,终于不是萌娘系了-。 -
Node.js 初试水 Node + Backbone + Redis —— 公众档所
这就是公众便所!噗,口误,是公众档所。
出去打印店或者什么的时候的临时储存盘。上传之后就得到提取码,直接拿到打印店什么的去就 OK 了。文件保留七天(还没写这个守护进程)。
项目概述
该项目旨在提供一个简单的在线文件存储服务,用户可以上传文件并获取一个提取码。通过这个提取码,用户可以在任何地方访问他们的文件。文件将在服务器上保存七天,之后会被自动删除。
技术栈
- Node.js: 用于后端逻辑处理。
- Backbone.js: 用于前端逻辑处理和页面结构。
- Redis: 用于存储文件元数据和提取码。
示例代码
后端(Node.js)
const express = require('express');
const bodyParser = require('body-parser');
const redis = require('redis');
const fs = require('fs');
const app = express();
app.use(bodyParser.json());
// 创建 Redis 客户端
const client = redis.createClient();
client.on('error', (err) => {
console.log(`Redis Error: ${err}`);
});
app.post('/upload', (req, res) => {
const file = req.files.file;
const code = Math.random().toString(36).substr(2, 10); // 生成随机提取码
// 保存文件到本地
const filePath = `./uploads/${code}`;
file.mv(filePath, (err) => {
if (err) return res.status(500).send(err);
// 存储提取码和文件路径到 Redis
client.set(code, filePath, 'EX', 604800, (err) => {
if (err) return res.status(500).send(err);
res.send({ code });
});
});
});
app.get('/:code', (req, res) => {
client.get(req.params.code, (err, reply) => {
if (err || !reply) return res.status(404).send('File not found.');
res.download(reply);
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
前端(Backbone.js)
$(document).ready(() => {
const FileModel = Backbone.Model.extend({});
const FileView = Backbone.View.extend({
el: '#file-form',
events: {
'submit': 'onSubmit'
},
onSubmit(e) {
e.preventDefault();
const formData = new FormData(this.el);
$.ajax({
url: '/upload',
method: 'POST',
data: formData,
processData: false,
contentType: false,
success: (data) => {
alert(`Your file code is: ${data.code}`);
},
error: (jqXHR, textStatus, errorThrown) => {
alert(`Error: ${textStatus} - ${errorThrown}`);
}
});
}
});
const fileView = new FileView();
});
文件结构
public-file-house/
├── uploads/ # 保存上传的文件
├── public/ # 静态资源目录
│ ├── css/
│ ├── js/
│ └── index.html
├── server.js # 后端 Node.js 服务
└── client.js # 前端 Backbone.js 脚本
总结
这个项目展示了如何使用 Node.js、Backbone.js 和 Redis 来构建一个简单的在线文件存储服务。通过简单的前端表单上传文件,并生成一个提取码。用户可以通过这个提取码下载文件。文件会在服务器上保存七天,之后会自动删除。希望这个示例能帮助你理解如何结合这些技术来实现功能。
不错啊。。不过还没有试用
赞,有创意,文件直接存自己服务器上么 …
是啊。
好吧 准备写个小脚本自动上传文件去了…
汝想做甚 -。 -
代码中充满了二次元…
赞一个~
一看就知道是宅男。
提取碼不好記。。
所以有个发送到飞信的功能啊-。 -
根据你的描述,“公众便所”实际上是一个用于临时存储文件的系统,用户上传文件后可以获取一个提取码,然后通过这个提取码在需要时从系统中下载文件。系统会将文件保存七天。
该项目使用了 Node.js、Backbone.js 和 Redis 技术栈来实现。以下是对每个技术组件的简要说明:
- Node.js:用于构建服务器端应用,处理HTTP请求,与客户端进行交互。
- Backbone.js:一种JavaScript库,用于构建前端应用的结构,包括模型、视图、路由器等。
- Redis:一个内存中的数据存储系统,用来快速地存储和检索数据,比如文件元数据和文件内容。
示例代码:
Node.js 后端:
首先,你需要安装必要的依赖包,例如 express
(用于创建HTTP服务器)、multer
(用于处理文件上传)以及 redis
(用于与Redis数据库交互)。
npm install express multer redis
然后你可以创建一个简单的Express应用来处理文件上传和检索:
const express = require('express');
const multer = require('multer');
const redis = require('redis');
const app = express();
// 设置Multer存储引擎
const storage = multer.memoryStorage(); // 使用内存存储引擎,适用于小型文件
const upload = multer({ storage: storage });
// 连接到Redis
const client = redis.createClient();
client.on('error', (err) => console.log('Redis Client Error', err));
app.post('/upload', upload.single('file'), async (req, res) => {
const file = req.file;
if (!file) return res.status(400).send('No file uploaded.');
// 将文件名和内容存入Redis
const key = `${Date.now()}-${file.originalname}`;
await client.set(key, file.buffer);
// 返回提取码(这里简单地使用文件名作为提取码)
res.send({ key });
});
app.get('/download/:key', async (req, res) => {
const key = req.params.key;
// 从Redis中获取文件
client.get(key, async (err, buffer) => {
if (err) return res.status(500).send('Error retrieving file.');
if (!buffer) return res.status(404).send('File not found.');
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-Disposition', `attachment; filename="${key}"`);
res.send(buffer);
});
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
上述代码展示了如何使用Node.js和Express接收文件上传,并将文件内容存储到Redis中,同时提供一个接口供用户通过提取码下载文件。请注意,这只是一个基本示例,实际应用中还需要考虑错误处理、文件大小限制以及安全性等问题。