Study
Flask

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.

Editor Latihan

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.