Node.js作为Django的自定义(stream媒体)上传处理程序

我想用Django构build一个以上传为中心的应用程序。 一种方法是使用nginx的上传模块(非阻塞),但是它有问题。 Node.js应该是这种types的应用程序的一个很好的候选人。 但是我怎样才能让node.js作为Django的upload_handler() ? 我不知道在哪里寻找例子?

好吧,我不喜欢这个主题或任何东西的专家,但我认为我理解它的方式,nginx是一个代理服务器,它运行在你的django应用程序的web服务器前面,对吗?

您可以构build一个简单的node.js服务器,它执行相同的操作 – 在端口80上侦听,等到请求完全发送到服务器,然后将其转发到为Django应用程序提供服务的Web服务器。 如果你的问题是web服务器线程正在被长时间运行的上传使用,那么我认为这将解决这个问题。

这里有一些代码 – 就在我头顶

var http = require('http'); var server = http.createServer(function (req, res) { var headers = req.headers; var url = req.url; var method = req.method; var body = ''; req.addListener('data', function(chunk) { body += chunk; }); req.addListener('end', function() { // at this point the request is completely uploaded (including files) // so it can be forwarded to the django webserver var dj_client = http.createClient(8000, 'localhost'); var dj_req = dj_client.request(method, url, headers); dj_req.addListener('response', function (dj_res) { // here the response have been received from the django server // so we can return that to the waiting client res.writeHead(dj_res.status, dj_res.headers); dj_res.addListener('data', res.write); dj_res.addListener('end', res.close); }); // send the request to the django webserver dj_req.write(body); dj_req.close(); }); }); server.listen(80); 

使node.js将文件写入磁盘,并将上载POST与“_node_file”值一起代理到Django,以便您的Django视图知道从何处获取文件。