Python 无需点击下载链接即可将文件从服务器发送到浏览器的方法

Python 无需点击下载链接即可将文件从服务器发送到浏览器的方法,python,socket.io,Python,Socket.io,我想问的是,我有一个网站,它接受用户档案并生成某种特定于用户的pdf报告。Pdf在后端生成。所以,当用户点击“生成”按钮时,它应该显示阻塞消息,一旦生成文件,阻塞消息将被删除,文件将显示标签 我可以在socket.io的帮助下完成这项工作,坦率地说,我从一个博客上复制了这个解决方案,但没有太多了解。所以我的堆栈是Python,socket.io位于节点上。虽然它在我的开发机器上工作得很好,但在服务器上,它一直在JavaScript中抛出连接错误消息,而在后端post消息失败。所以我目前在前端和后

我想问的是,我有一个网站,它接受用户档案并生成某种特定于用户的pdf报告。Pdf在后端生成。所以,当用户点击“生成”按钮时,它应该显示阻塞消息,一旦生成文件,阻塞消息将被删除,文件将显示标签

我可以在socket.io的帮助下完成这项工作,坦率地说,我从一个博客上复制了这个解决方案,但没有太多了解。所以我的堆栈是Python,socket.io位于节点上。虽然它在我的开发机器上工作得很好,但在服务器上,它一直在JavaScript中抛出连接错误消息,而在后端post消息失败。所以我目前在前端和后端都有问题。多亏了我盲目复制粘贴的东西,我对修复有点不知所措

除此之外,还有其他选择吗?我可以考虑使用基于Python的socket io(这次我将阅读并实现),但是任何其他方法都可以实现类似的功能吗?我使用它只是将生成的pad发送回客户机,没有其他与客户机和服务器的通信

添加代码

它的工作原理类似于,客户端打开下载/生成页面并获得分配的ID,单击生成按钮后,ID被发送到后端,现在芹菜生成PDF(转换为base64),然后在nodejs/notify上发布ID。现在socket.io已经在监听/notify url,所以一旦发布数据,它就会显示在浏览器中

浏览器->sock(注册)->AJAX->芹菜(任务)->on nodejs/notify->浏览器sockio客户端显示数据

这是密码

客户端/浏览器代码

 // func called on generate btn press
 $client.on('notify', function(result) {
        $.unblockUI();
        // alert('In Receiving function...');
        var $obj = $('#dynamic-pdf');
        $obj.hide();
        $obj.attr('data', result);
        $obj.show();
        $('button#view-again').removeClass('disabled');
        $('#previe').modal('show');
    });

    blockWithMsg("Generating PDF, Please Wait...");

    $.ajax({
        url: $url,
        data: {clientId: $clientId},
        method: 'POST',
        cache: false,
        headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'},
    }); 
    // func finished

   <!-- register client on page load -->
   <script src="http://localhost:3000/socket.io/socket.io.js"></script>
   <script>
      var $client = io('http://localhost:3000'),
          $clientId = null;

      $client.on('register', function(id) {
          $clientId = id;
      });

    </script>
var app = require('express')(),
    server = require('http').Server(app),
    io = require('socket.io')(server),
    bodyParser = require('body-parser');

// Accept URL-encoded body in POST request.
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000}));
app.use(require('morgan')('dev'));

// Echo the client's ID back to them when they connect.
io.on('connection', function(client) {
    client.emit('register', client.id);
});

// Forward task results to the clients who initiated them.
app.post('/notify', function(request, response) {
    var client = io.sockets.connected[request.body.clientId];
    client.emit('notify', request.body.result);
    response.type('text/plain');
    response.send('Result broadcast to client.');
});

server.listen(3000);
我收到未定义值错误的消息

(代表OP发布)


错误是我在不同的域上启动了站点,而不是在浏览器JavaScript中的socket.io连接(仍然是localhost)中提到的域。

您应该发布一段实际代码的样子。在没有看到任何东西的情况下很难做出回应。