Bird
Raised Fist0
Flaskframework~5 mins

File upload processing in Flask

Choose your learning style10 modes available
Introduction

File upload processing lets your web app receive files from users. This helps users share images, documents, or other files easily.

When users need to upload profile pictures.
When users submit documents like resumes or reports.
When users share images or videos in a chat app.
When collecting files for online forms or applications.
Syntax
Flask
from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return 'No file part'
    file = request.files['file']
    if file.filename == '':
        return 'No selected file'
    if file:
        file.save('/path/to/save/' + file.filename)
        return 'File uploaded successfully'

Use request.files to access uploaded files.

Always check if the file exists and has a filename before saving.

Examples
Saves the uploaded file to the '/uploads/' folder with its original name.
Flask
file = request.files['file']
file.save('/uploads/' + file.filename)
Checks if the file was sent in the request.
Flask
if 'file' not in request.files:
    return 'No file part'
Ensures the user selected a file before saving.
Flask
if file.filename == '':
    return 'No selected file'
Sample Program

This Flask app shows a simple file upload form. When a user picks a file and submits, the file is saved in the 'uploads' folder. The app confirms the upload with a message.

The form uses enctype="multipart/form-data" which is required for file uploads. The input has an ARIA label for accessibility.

Flask
from flask import Flask, request, render_template_string
import os

app = Flask(__name__)

UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

@app.route('/')
def index():
    return render_template_string('''
    <h1>Upload a File</h1>
    <form method="POST" action="/upload" enctype="multipart/form-data">
      <input type="file" name="file" aria-label="Choose file to upload">
      <button type="submit">Upload</button>
    </form>
    ''')

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return 'No file part'
    file = request.files['file']
    if file.filename == '':
        return 'No selected file'
    filepath = os.path.join(UPLOAD_FOLDER, file.filename)
    file.save(filepath)
    return f'File "{file.filename}" uploaded successfully!'

if __name__ == '__main__':
    app.run(debug=True)
OutputSuccess
Important Notes

Always set enctype="multipart/form-data" in your HTML form to enable file uploads.

Use secure file names or sanitize them to avoid security risks.

Make sure the upload folder exists and your app has permission to write there.

Summary

File upload processing lets users send files to your Flask app.

Use request.files to get the uploaded file and save it safely.

Always check for file presence and valid filename before saving.

Practice

(1/5)
1. What does request.files in Flask represent when handling file uploads?
easy
A. A dictionary-like object containing uploaded files
B. A list of all form fields submitted
C. A string with the file path on the server
D. A function to save files automatically

Solution

  1. Step 1: Understand request.files role

    It holds files sent by the client in a dictionary-like object where keys are input names.
  2. Step 2: Differentiate from other request parts

    Unlike form fields in request.form, request.files specifically contains uploaded files.
  3. Final Answer:

    A dictionary-like object containing uploaded files -> Option A
  4. Quick Check:

    Files = dictionary-like object [OK]
Hint: Remember: files come in a dictionary, not a list or string [OK]
Common Mistakes:
  • Confusing request.files with request.form
  • Expecting a list instead of a dictionary-like object
  • Thinking it automatically saves files
2. Which of the following is the correct way to check if a file was uploaded in Flask?
easy
A. if request.files.filename == ''
B. if 'file' in request.files and request.files['file'].filename != ''
C. if request.form['file'] != None
D. if request.files['file'] is None

Solution

  1. Step 1: Check file presence in request.files

    Use 'file' in request.files to confirm the file input exists.
  2. Step 2: Verify filename is not empty

    Check request.files['file'].filename != '' to ensure a file was selected.
  3. Final Answer:

    if 'file' in request.files and request.files['file'].filename != '' -> Option B
  4. Quick Check:

    Check key and filename not empty [OK]
Hint: Check key exists and filename is not empty string [OK]
Common Mistakes:
  • Checking request.form instead of request.files
  • Using is None instead of checking filename
  • Comparing filename directly to None
3. Given this Flask code snippet:
file = request.files['photo']
filename = secure_filename(file.filename)
file.save(f"uploads/{filename}")
return f"Saved {filename}"

What will be the output if a user uploads a file named my cat.png?
medium
A. Saved mycat.png
B. Saved my cat.png
C. Saved my_cat.png
D. Error due to spaces in filename

Solution

  1. Step 1: Understand secure_filename effect

    This function replaces spaces with underscores and removes unsafe characters.
  2. Step 2: Apply to 'my cat.png'

    The filename becomes 'my_cat.png' after sanitization.
  3. Final Answer:

    Saved my_cat.png -> Option C
  4. Quick Check:

    Spaces replaced by underscores in filename [OK]
Hint: Remember secure_filename replaces spaces with underscores [OK]
Common Mistakes:
  • Assuming spaces remain in filename
  • Expecting filename unchanged
  • Thinking spaces cause save error
4. What is wrong with this Flask file upload code?
file = request.files['file']
file.save(file.filename)
return 'File saved!'
medium
A. It does not check if a file was uploaded
B. It saves file to a wrong directory
C. It should use request.form instead of request.files
D. It uses an unsafe filename directly

Solution

  1. Step 1: Identify filename safety issue

    Using file.filename directly can allow unsafe paths or characters.
  2. Step 2: Recommend using secure_filename

    To avoid security risks, filenames must be sanitized before saving.
  3. Final Answer:

    It uses an unsafe filename directly -> Option D
  4. Quick Check:

    Always sanitize filenames before saving [OK]
Hint: Always use secure_filename before saving files [OK]
Common Mistakes:
  • Not checking if file exists before saving
  • Saving files without sanitizing filename
  • Confusing request.form with request.files
5. You want to allow users to upload only PNG images and save them safely in Flask. Which code snippet correctly implements this?
hard
A. file = request.files['image'] if file and file.filename.endswith('.png'): filename = secure_filename(file.filename) file.save(f"uploads/{filename}") return 'PNG saved' else: return 'Invalid file'
B. file = request.files['image'] if file.filename: file.save(file.filename) return 'File saved' else: return 'No file'
C. file = request.files.get('image') if file and file.filename: filename = secure_filename(file.filename) file.save(f"uploads/{filename}") return 'File saved' else: return 'No file uploaded'
D. file = request.files['image'] if file and file.filename.endswith('.png'): file.save(file.filename) return 'PNG saved' else: return 'Invalid file'

Solution

  1. Step 1: Check file presence and extension

    file = request.files['image'] if file and file.filename.endswith('.png'): filename = secure_filename(file.filename) file.save(f"uploads/{filename}") return 'PNG saved' else: return 'Invalid file' checks if file exists and filename ends with '.png' to allow only PNG files.
  2. Step 2: Use secure_filename before saving

    It sanitizes the filename to prevent security issues before saving.
  3. Step 3: Return appropriate messages

    Returns confirmation if saved, else an invalid file message.
  4. Final Answer:

    Option A correctly checks extension and uses secure_filename -> Option A
  5. Quick Check:

    Check extension + secure filename + save [OK]
Hint: Check extension and sanitize filename before saving [OK]
Common Mistakes:
  • Not sanitizing filename before saving
  • Not checking file extension properly
  • Saving files without checking if uploaded
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard