Python Flask 不向客户端发送发射
Posted
技术标签:
【中文标题】Python Flask 不向客户端发送发射【英文标题】:Python Flask do not send emit to the client 【发布时间】:2017-12-05 10:12:48 【问题描述】:在我的 Web 应用程序中,用户应该上传一个 .csv 文件,我的服务器读取它,进行一些计算,然后将计算中使用的命令发送回客户端,然后发出发射。
这是用于接收文件的python代码:
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit a empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
stream = io.StringIO(file.stream.read().decode("UTF8"), newline=None)
csv_input = pd.read_csv(stream,sep=None,engine='python')
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
command_used = "csv_input = pd.read_csv('<your_file_name>',sep=None,engine='python')"
socketio.emit('bot_command_line_response','data': command_used, 'count': session['receive_count'])
return redirect(url_for('uploaded_file',filename=filename))
return render_template('index.html', async_mode=socketio.async_mode)
在客户端,我有用于上传文件的表单:
<form id="upload" method = "POST" action='#'
enctype = "multipart/form-data">
<input type = "file" name = "file" id="file"/>
<input type = "submit" value="Upload"/>
</form>
还有我网页上显示所用命令的区域:
socket.on('bot_command_line_response', function(msg)
$('#log_command_line').append('<br>' + $('<div/>').text('Command ' + msg.count + ': ' + msg.data).html());
);
但是,当我上传文件时,该区域没有显示使用的命令。
感谢您的帮助。
【问题讨论】:
这里有点困惑,您尝试通过 WebSocket 或 SocketIO 上传文件,但是为什么您的upload_file()
中有一个 POST 方法验证(针对 HTTP 请求完成)?这将失败,因此您的客户端将不会收到(您正在谈论的命令)来自该函数的发射。如果你真的想通过 WebSocket 上传文件,你需要使用write stream。
现在上传文件部分正在工作,经过我的编辑。问题是我没有在我的客户端服务器上收到 socketio.emit() 命令。我应该显示我应该通过这个命令接收的信息,但是每次我尝试从常规路线“/”做任何事情都没有发生。
【参考方案1】:
这就是我解决问题的方法:
-
当我第一次上传文件时,我将文件名保存在服务器的 session 变量中。每次我需要使用该文件时,我都会重新阅读。
我知道这看起来不是最好的解决方案,但至少它有效。
谢谢你们。
【讨论】:
以上是关于Python Flask 不向客户端发送发射的主要内容,如果未能解决你的问题,请参考以下文章
烧瓶-SocketIO + uWSGI。与 Mule 工人一起发射
你如何将消息从 Flask 服务器(Python)发送到 HTML 客户端?
Ionic 3 - Laravel - 不向客户端发送允许 CORS 的标头
通过 Websockets 从 Python Flask 服务器连续向客户端发送数据