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

时间:2010-03-08 17:31:32

标签: python django javascript node.js uploading

我想使用Django构建一个以上传为中心的应用。一种方法是使用nginx的上传模块(非阻塞),但它有问题。 Node.js应该是这类应用程序的一个很好的候选者。但是,如何使node.js充当upload_handler() for Django?我不知道在哪里寻找例子?

2 个答案:

答案 0 :(得分:2)

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

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

这是一些代码 - 只是在我的头顶

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);

答案 1 :(得分:0)

让node.js将文件写入磁盘并将上传POST代理到Django以及'_node_file'值,以便您的Django视图知道从哪里获取文件。