any2 / app.py
izuemon's picture
Create app.py
a6d9922 verified
Raw
History Blame Contribute Delete
2.69 kB
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import os
import uuid
import json
from datetime import datetime, timedelta
from werkzeug.utils import secure_filename
app = Flask(__name__)
CORS(app)
UPLOAD_FOLDER = 'uploads'
METADATA_FOLDER = 'metadata'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
os.makedirs(METADATA_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB limit
@app.route('/')
def index():
return send_from_directory('.', 'uploader.html')
@app.route('/api/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': 'No file part'}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'error': 'No selected file'}), 400
# Generate unique ID for the file
file_id = str(uuid.uuid4())
original_filename = secure_filename(file.filename)
extension = os.path.splitext(original_filename)[1]
stored_filename = f"{file_id}{extension}"
file_path = os.path.join(app.config['UPLOAD_FOLDER'], stored_filename)
file.save(file_path)
file_size = os.path.getsize(file_path)
# Store metadata
metadata = {
'id': file_id,
'original_filename': original_filename,
'stored_filename': stored_filename,
'size': file_size,
'upload_time': datetime.now().isoformat(),
'password': None,
'expiry_days': None
}
with open(os.path.join(METADATA_FOLDER, f"{file_id}.json"), 'w') as f:
json.dump(metadata, f)
return jsonify({
'id': file_id,
'original_filename': original_filename,
'size': file_size
})
@app.route('/api/set-sharing', methods=['POST'])
def set_sharing():
data = request.json
file_id = data.get('id')
password = data.get('password')
expiry_days = data.get('expiry_days')
metadata_path = os.path.join(METADATA_FOLDER, f"{file_id}.json")
if not os.path.exists(metadata_path):
return jsonify({'error': 'File not found'}), 404
with open(metadata_path, 'r') as f:
metadata = json.load(f)
metadata['password'] = password if password else None
metadata['expiry_days'] = expiry_days
metadata['share_url'] = f"/share/{file_id}"
with open(metadata_path, 'w') as f:
json.dump(metadata, f)
# Generate share URL
share_url = f"/share/{file_id}"
return jsonify({
'share_url': share_url,
'id': file_id
})
if __name__ == '__main__':
app.run(debug=True, port=7860, host="0.0.0.0")