Загрузка данных
import os
import socket
from flask import Flask, request, send_from_directory, render_template_string
import qrcode
app = Flask(__name__)
# Папка для сохранения загруженных файлов
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# HTML-шаблон страницы
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Локальный обмен</title>
<style>
body { font-family: sans-serif; padding: 20px; max-width: 600px; margin: 0 auto; background: #f4f4f9; }
.card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); margin-bottom: 20px; }
textarea, input[type="file"], input[type="submit"] { width: 100%; margin-top: 10px; box-sizing: border-box; }
textarea { height: 100px; }
button, input[type="submit"] { padding: 10px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }
ul { list-style: none; padding: 0; }
li { margin: 8px 0; }
a { color: #007bff; text-decoration: none; }
</style>
</head>
<body>
<div class="card">
<h3>Отправить на ПК</h3>
<form action="/send_text" method="post">
<textarea name="text" placeholder="Введите текст..."></textarea>
<input type="submit" value="Отправить текст">
</form>
<hr>
<form action="/upload_file" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Отправить файл">
</form>
</div>
<div class="card">
<h3>Получить с ПК</h3>
<form action="/set_pc_data" method="post" style="margin-bottom: 15px;">
<textarea name="pc_text" placeholder="Текст для передачи на телефон..."></textarea>
<input type="submit" value="Задать текст для телефона">
</form>
{% if pc_text %}
<div>
<p><b>Буфер с ПК:</b></p>
<p id="pc-text-content" style="background: #e9ecef; padding: 10px; border-radius: 4px;">{{ pc_text }}</p>
<script>
// Автоматическое копирование при загрузке страницы, если текст изменился
navigator.clipboard.writeText(`{{ pc_text }}`).then(() => {
console.log('Текст скопирован в буфер обмена');
}).catch(err => {
console.error('Ошибка копирования: ', err);
});
</script>
</div>
{% endif %}
{% if pc_file %}
<div style="margin-top: 15px;">
<p><b>Файл с ПК доступен для скачивания:</b></p>
<a href="/download/{{ pc_file }}" download><button>Скачать {{ pc_file }}</button></a>
</div>
{% endif %}
</div>
<div class="card">
<h3>Файлы в хранилище</h3>
<ul>
{% for file in files %}
<li><a href="/uploads/{{ file }}" download>{{ file }}</a></li>
{% endfor %}
</ul>
</div>
</body>
</html>
"""
# Глобальное состояние для данных с ПК
pc_state = {
"text": "",
"file": ""
}
def get_local_ip():
"""Получение локального IP-адреса ПК"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(('10.255.255.255', 1))
ip = s.getsockname()[0]
except Exception:
ip = '127.0.0.1'
finally:
s.close()
return ip
@app.route('/')
def index():
files = os.listdir(app.config['UPLOAD_FOLDER'])
return render_template_string(
HTML_TEMPLATE,
pc_text=pc_state["text"],
pc_file=pc_state["file"],
files=files
)
@app.route('/send_text', methods=['POST'])
def receive_text():
text = request.form.get('text', '')
if text:
with open('enter.txt', 'a', encoding='utf-8') as f:
f.write(text + '\n---\n')
return index()
@app.route('/upload_file', methods=['POST'])
def receive_file():
if 'file' in request.files:
file = request.files['file']
if file.filename != '':
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return index()
@app.route('/set_pc_data', methods=['POST'])
def set_pc_data():
pc_state["text"] = request.form.get('pc_text', '')
return index()
@app.route('/uploads/<filename>')
def download_uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
@app.route('/download/<filename>')
def download_pc_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
port = 5000
ip = get_local_ip()
url = f"http://{ip}:{port}"
# Генерация QR-кода в консоли
qr = qrcode.QRCode()
qr.add_data(url)
qr.make(fit=True)
print(f"\nСервер запущен. Адрес: {url}\n")
qr.print_ascii(invert=True)
app.run(host='0.0.0.0', port=port)