【发布时间】: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() 命令。我应该显示我应该通过这个命令接收的信息,但是每次我尝试从常规路线“/”做任何事情都没有发生。
标签: javascript jquery python flask websocket