Upload files to "/"
This commit is contained in:
parent
305bd1ec17
commit
8d363eb3c1
77
api.py
Normal file
77
api.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
import os
|
||||
import random
|
||||
import threading
|
||||
import time
|
||||
from flask import Flask, render_template, request
|
||||
from flask_socketio import SocketIO, emit, join_room, leave_room, disconnect
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config['SECRET_KEY'] = 'your_secret_key'
|
||||
socketio = SocketIO(app, cors_allowed_origins="*")
|
||||
|
||||
files = {}
|
||||
lock = threading.Lock()
|
||||
|
||||
def generate_code():
|
||||
return ''.join(random.choices('0123456789', k=6))
|
||||
|
||||
def remove_file_after_timeout(code, uploader_sid, timeout=600):
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
with lock:
|
||||
if code not in files or files[code].get('downloading'):
|
||||
return
|
||||
remaining_time = int(timeout - (time.time() - start_time))
|
||||
socketio.emit('countdown', {'code': code, 'remaining_time': remaining_time}, room=uploader_sid)
|
||||
time.sleep(1)
|
||||
|
||||
with lock:
|
||||
if code in files:
|
||||
del files[code]
|
||||
socketio.emit('file_expired', {'code': code}, room=uploader_sid)
|
||||
print(f"File transfer for code {code} has expired and been removed.")
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
||||
@socketio.on('upload_file')
|
||||
def handle_upload_file(data):
|
||||
code = generate_code()
|
||||
file = data['file']
|
||||
uploader_sid = request.sid
|
||||
|
||||
with lock:
|
||||
files[code] = {'file': file, 'uploader_sid': uploader_sid, 'downloading': False}
|
||||
|
||||
threading.Thread(target=remove_file_after_timeout, args=(code, uploader_sid)).start()
|
||||
|
||||
emit('file_uploaded', {'code': code}, room=uploader_sid)
|
||||
|
||||
@socketio.on('join')
|
||||
def on_join(data):
|
||||
code = data['code']
|
||||
join_room(code)
|
||||
emit('joined_room', {'message': f'Joined room {code}'}, room=code)
|
||||
|
||||
@socketio.on('download_request')
|
||||
def handle_download_request(data):
|
||||
code = data['code']
|
||||
with lock:
|
||||
if code in files:
|
||||
file_info = files[code]
|
||||
file = file_info['file']
|
||||
uploader_sid = file_info['uploader_sid']
|
||||
file_info['downloading'] = True
|
||||
emit('download_file', {'file': file}, room=code)
|
||||
emit('download_started', {'message': f'Download started for code {code}'}, room=code)
|
||||
emit('file_downloading', {'message': 'File is being downloaded'}, room=uploader_sid)
|
||||
else:
|
||||
emit('error', {'message': 'Invalid code or file does not exist'}, room=code)
|
||||
|
||||
@socketio.on('disconnect')
|
||||
def on_disconnect():
|
||||
leave_room(request.sid)
|
||||
|
||||
if __name__ == '__main__':
|
||||
socketio.run(app, host='0.0.0.0', port=5000, debug=True)
|
Loading…
Reference in a new issue