import os
import base64
from flask import Flask, render_template, request, redirect, url_for
import pymysql
import magic
app = Flask(__name__)
# アップロードされたファイルを保存するためのディレクトリ
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
# データベース接続設定
db_config = {
'host': 'sql309.infinityfree.com',
'user': 'if0_36911347',
'password': 'j9RRoK4mhTstU',
'database': 'if0_36911347_i_scratch_data',
'cursorclass': pymysql.cursors.DictCursor
}
# ファイルをbase64エンコードする関数
def file_to_base64(file_path):
with open(file_path, "rb") as f:
return base64.b64encode(f.read()).decode('utf-8')
# 新しいプロジェクトをデータベースにアップロードする関数
def upload_project(thumbnail, group, name, explanation, file_data):
try:
connection = pymysql.connect(**db_config)
with connection.cursor() as cursor:
# データベースにデータを挿入
sql = """INSERT INTO projects (thumbnail, group, name, explanation, file_data, like, view, upload_date, update_date)
VALUES (%s, %s, %s, %s, %s, 0, 0, NOW(), NOW())"""
cursor.execute(sql, (thumbnail, group, name, explanation, file_data))
connection.commit()
except Exception as e:
print(f"Error: {e}")
finally:
connection.close()
# プロジェクトのアップロードフォーム
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# フォームからのデータを取得
thumbnail_file = request.files['thumbnail']
name = request.form['name']
explanation = request.form['explanation']
file_data_file = request.files['file_data']
# 画像とファイルのBase64エンコード
if thumbnail_file:
thumbnail_path = os.path.join(UPLOAD_FOLDER, thumbnail_file.filename)
thumbnail_file.save(thumbnail_path)
thumbnail = file_to_base64(thumbnail_path)
else:
thumbnail = None # サムネイルがなければNoneに設定
if file_data_file:
file_data_path = os.path.join(UPLOAD_FOLDER, file_data_file.filename)
file_data_file.save(file_data_path)
file_data = file_to_base64(file_data_path)
else:
file_data = None # txtファイルがない場合の処理
group = "" # 所属グループは空白
# プロジェクトをデータベースにアップロード
upload_project(thumbnail, group, name, explanation, file_data)
return redirect(url_for('index'))
return render_template('index.html')
@app.route('/close', methods=['GET', 'POST'])
def close():
return """"""
@app.route('/close2', methods=['GET', 'POST'])
def close2():
return """"""
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)