در Flask فایلهای رسانهای (Media) مثل تصاویر آپلود شده توسط کاربر، فایلهای ویدئو، PDF و سایر فایلها مشابه استاتیکها هستند اما معمولاً به جای سرو شدن مستقیم از پوشه static/، در پوشهای جداگانه ذخیره میشوند و مسیر دسترسی به آنها با Upload Folder پیکربندی میشود.
تعریف پوشه رسانهای
برای ذخیره فایلهای آپلود شده توسط کاربر، میتوان هنگام ایجاد اپلیکیشن یا بعد از آن مسیر پوشهای را مشخص کرد:
import os
from flask import Flask
app = Flask(__name__)
# مسیر پوشه رسانهای
app.config['UPLOAD_FOLDER'] = os.path.join(app.root_path, 'media')
# محدودیت اندازه فایل آپلود (اختیاری)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB
در این مثال، همه فایلهای آپلود شده داخل پوشه media/ ذخیره میشوند.
دسترسی به فایلهای آپلود شده
برای دسترسی به فایلها در مرورگر، میتوان مسیر Media را با یک Route ساده سرو کرد:
from flask import send_from_directory
@app.route('/media/<filename>')
def media_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
با این کار هر فایلی که در پوشه media آپلود شده باشد، از طریق URL /media/filename در دسترس خواهد بود.
مثال آپلود فایل
from flask import request, redirect, url_for
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file:
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return redirect(url_for('media_file', filename=file.filename))
return '''
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
'''
در این مثال:
- کاربر فایل را ارسال میکند.
- فایل داخل پوشه
media/ذخیره میشود. - پس از ذخیره، کاربر به URL فایل آپلود شده هدایت میشود.
جمعبندی
- فایلهای Media در پوشهای جداگانه (مثلاً
media/) ذخیره میشوند. - مسیر پوشه توسط
UPLOAD_FOLDERمشخص میشود. - با
send_from_directoryمیتوان فایلها را در مرورگر سرو کرد. - میتوان محدودیت حجم فایل را با
MAX_CONTENT_LENGTHتعیین کرد.