File Upload
Penjelasan
File yang diunggah lewat form dengan enctype='multipart/form-data' bisa diakses lewat request.files, bukan request.form. Nama file asli dari user tidak boleh dipercaya langsung untuk disimpan ke disk karena berisiko path traversal atau karakter berbahaya — Flask/Werkzeug menyediakan fungsi secure_filename() untuk membersihkannya. Kamu juga perlu menentukan folder tujuan lewat app.config['UPLOAD_FOLDER'] dan sebaiknya membatasi ekstensi file yang diizinkan secara eksplisit.
Contoh Konsep
import os
from flask import Flask, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
EKSTENSI_DIIZINKAN = {'png', 'jpg', 'jpeg'}
def ekstensi_valid(nama_file):
return '.' in nama_file and nama_file.rsplit('.', 1)[1].lower() in EKSTENSI_DIIZINKAN
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files.get('foto')
if file and ekstensi_valid(file.filename):
nama_aman = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], nama_aman))
return f'File {nama_aman} berhasil diunggah'
return 'File tidak valid', 400
Praktikum
Lengkapi route upload agar mengambil file dari field 'dokumen' dan menyimpannya dengan nama yang sudah diamankan.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Batasi ukuran maksimal upload lewat app.config['MAX_CONTENT_LENGTH'] supaya server tidak kewalahan menerima file raksasa dari client yang tidak dipercaya.