Skip to content

Instantly share code, notes, and snippets.

@jadsonbr
Created December 4, 2019 16:43
Show Gist options
  • Save jadsonbr/43aaffe824bccf68fb7b365eab0c02a9 to your computer and use it in GitHub Desktop.
Save jadsonbr/43aaffe824bccf68fb7b365eab0c02a9 to your computer and use it in GitHub Desktop.
Envio de arquivos com Flask e socket.io
from flask_cors import CORS
socketio = SocketIO()
app = Flask(__name__)
CORS(app)
# CONFIGURACAO
socketio.init_app(app, ping_timeout=1800, binary=True, max_http_buffer_size=10000000000)
# RECEBE O ARQUIVO AOS PEDAÇOS
@socketio.on('write-chunk')
def write_chunk(filename, offset, data):
folder = os.path.join('dir', 'my_folder')
try:
with open(os.path.join(folder, filename), 'r+b') as f:
f.seek(offset)
f.write(data)
except IOError:
nome, ext = os.path.splitext(filename)
os.remove(os.path.join(folder, filename))
return False
return True
# AO FINALIZAR O ENVIO AOS PEDAÇOS É ACIONADO ESSE EVENTO PARA PROCESSAR O ARQUIVO
@socketio.on('create_doc')
def task_create_doc(filename, token):
folder = os.path.join('dir', 'my_folder')
nome, ext = os.path.splitext(filename)
file_buff = open(os.path.join(folder, filename), 'rb')
file = file_buff.read()
file_buff.close()
filename = os.path.join(folder, filename)
socketio.start_background_task(target=create_doc(file, data, filename))
# AQUI PROCESSA EM BACKGROUND E RESPONDE AO CLIENTE SOLICITANTE
def create_doc(file, data, filename):
# ...
emit('resposta_client', 'mensagem', broadcast=False)
# CONFIGURACAO DO SUPERVISOR
command=/DIR/gunicorn --worker-class eventlet -t 1800 -w 1 --log-file=- -b 0.0.0.0:9999 web:app
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment