2

我想使用 Django 构建一个以上传为中心的应用程序。一种方法是使用 nginx 的上传模块(非阻塞),但它有其问题。Node.js 应该是此类应用程序的理想选择。但是我怎样才能让 node.js 充当Django 的 upload_handler()呢?我不确定在哪里可以找到示例?

4

2 回答 2

2

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

您可以构建一个简单的 node.js 服务器来执行相同的操作 - 侦听端口 80,等到请求完全发送到服务器,然后将其转发到为 Django 应用程序提供服务的 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);
于 2010-03-14T01:28:34.020 回答
0

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

于 2010-05-02T17:22:00.250 回答