用nodejs写了个HTTP 文件服务器,好蛋疼
发布于 12 年前 作者 dingwei 16061 次预览 最后一次回复是 12 年前 来自
现在express里有个文件名的bug, res.sendfile, res.download之类的都有, 不支持路径中有中文名称包括文件名 后端用mongodb存文件全路径,下载时只通过id传, 原来想直接传全文件路径比如C:\works\a.txt,后来发现不行,好象security限制住了,根本不会route到/download/:filename的处理,直接显示无法GET…
主要两个页面,一个Add file, 一个显示所有文件,点击任意一个即可下载
exports.down = function(req, res){
var MongoClient = require('mongodb').MongoClient;
var fs = require('fs');
var path = require('path');
var ObjectID = require('mongodb').ObjectID;
MongoClient.connect("mongodb://localhost:27017/filelist", function(err, db) {
if (!err) {
console.log("We are connected.");
}
var fileid = req.params.id;
var collection = db.collection('filelink');
collection.findOne({"_id": ObjectID(fileid)}, function(err, item) {
var filepath = item["file"];
var filebase = path.basename(filepath);
//console.log(filepath);
//console.log(filebase);
res.download(filepath,filebase);
});
});
};
10 回复
标题是lz自嘲?
楼主不蛋疼,谁蛋疼! 一个简单的文件服务器都要搬出mongodb
大炮打蚊子
要保存状态啊,象HFS一样, 如果没有persistence, 下次开启时又没有了,上次share的列表, 你用文件去存一个列表也是一样。。。。 这个是可以共享任意磁盘上的文件的,不是那个public文件夹share, 设置一下就可以了
我也觉得,原来想用sqlite3, 结果那个傻X的sqlite npm package装不起来, 老是在node-gyp编译时出错 有空再试试
@dingwei
可下载任意文件:
@leizongmin 不错写的很精简, 有个问题是我需要保存一个列表,下次打开文件服务器时可以直接加载,另外你这个危险性太高,随便哪个程序都直接下载了汗。。。。 学习了, 用这个/download/* 用*不错, 我之前用的/download/:filename这样,怎么传全路径都不行,/download/C:/windows/notepad.exe直接会返回cannot get … 都不会跳入这个app.get处理程序 不知道怎么回事 我想实现跟HFS (HTTP File Server类似的功能), 每次保存上次的服务的文件列表, 下次自动加载,比较方便
@leizongmin 对了, 依然中文名乱码,这个是express的问题,用http模块就没问题
发一下写来自己用的非常简单的静态文件服务器,不需要express,mongodb,sqlite…
__filename 不如改成index.html