提问人:qwezxc789 提问时间:9/23/2023 最后编辑:qwezxc789 更新时间:9/24/2023 访问量:24
在 Flask 后端接收的 SocketIO 空 FormData
SocketIO empty FormData received at Flask backend
问:
我正在尝试通过 SocketIO 发送一些表单值,包括文件
const handleSubmit = () => {
const formData = new FormData();
formData.append('num1', numbers.num1);
formData.append('num2', numbers.num2);
formData.append('file', file);
socket.emit('submit', {payload: formData});
};
在我明白了console.log()
numbers.num1, numbers.num2, file: 1 1 File { name: "data.zip", lastModified: 1691230842633, webkitRelativePath: "", size: 1196056, type: "application/x-zip-compressed" }
后端接收事件
{'payload': {}}
app = Flask(__name__)
socketio = SocketIO(app)
CORS(app)
socketio.init_app(
app,
cors_allowed_origins="*",
logger=True,
engineio_logger=True)
@socketio.on('submit')
def handle_submit(data):
...
if __name__ == '__main__':
socketio.run(app, debug=True)
为什么事件处理程序中缺少有效负载?
更新:
在Chrome中,我只收到,在Firefox中{}
{'payload': {}}
UPD2:数据为空的原因是 FE 上的 FormData,它是空的。是什么导致了这种行为?append()
答:
0赞
Detlef
9/24/2023
#1
要通过套接字发送多个数据,包括文件,您可以使用嵌套结构。
以下示例显示了一个可能的变体,其中 ,如上面提到的教程所示,对应于从输入元素的 FileList 中获取的第一个元素的文件。file
socket.emit('submit',
{
num1: numbers.num1,
num2: numbers.num2,
file: {
name: file.name,
type: file.type,
size: file.size,
data: file
}
}
);
在服务器端,您将获得一个字典,其中包含以字节形式包含文件的数据。
评论