Bird
Raised Fist0
Flaskframework~10 mins

Serving uploaded files in Flask - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the function used to send files in Flask.

Flask
from flask import Flask, [1]
Drag options to blanks, or click blank then click option'
Asend_file
Brender_template
Crequest
Dredirect
Attempts:
3 left
💡 Hint
Common Mistakes
Importing 'render_template' instead of 'send_file'.
Forgetting to import 'send_file' at all.
2fill in blank
medium

Complete the route function to send a file named 'example.txt' from the 'uploads' folder.

Flask
from flask import send_file

@app.route('/download')
def download():
    return send_file('[1]')
Drag options to blanks, or click blank then click option'
A'static/example.txt'
B'example.txt'
C'uploads/example.txt'
D'/example.txt'
Attempts:
3 left
💡 Hint
Common Mistakes
Using just the filename without folder path.
Using the wrong folder like 'static'.
3fill in blank
hard

Fix the error in the code to correctly send a file with a custom download name.

Flask
return send_file('uploads/report.pdf', [1]='monthly_report.pdf')
Drag options to blanks, or click blank then click option'
Afile_name
Bfilename
Cattachment_filename
Ddownload_name
Attempts:
3 left
💡 Hint
Common Mistakes
Using the old argument 'attachment_filename' which is deprecated.
Using incorrect argument names like 'filename' or 'file_name'.
4fill in blank
hard

Fill both blanks to send a file as an attachment with the correct MIME type.

Flask
return send_file('uploads/image.png', [1]=True, [2]='image/png')
Drag options to blanks, or click blank then click option'
Aas_attachment
Bmimetype
Cdownload_name
Dattachment
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'attachment' instead of 'as_attachment'.
Confusing 'mimetype' with 'download_name'.
5fill in blank
hard

Fill all three blanks to serve an uploaded file securely using 'send_from_directory'.

Flask
from flask import send_from_directory

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory([1], [2], [3]=True)
Drag options to blanks, or click blank then click option'
A'uploads'
Bfilename
Cas_attachment
D'static'
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'static' folder instead of 'uploads'.
Passing filename as a string instead of variable.
Omitting 'as_attachment=True' causing inline display.

Practice

(1/5)
1. What is the main Flask function used to serve uploaded files from a specific folder?
easy
A. send_from_directory
B. render_template
C. redirect
D. url_for

Solution

  1. Step 1: Understand serving files in Flask

    Flask provides a function specifically to serve files from a folder safely, which is send_from_directory.
  2. Step 2: Identify the correct function

    render_template is for HTML templates, redirect sends users to a different URL, and url_for builds URLs. Only send_from_directory serves files.
  3. Final Answer:

    send_from_directory -> Option A
  4. Quick Check:

    Serving files = send_from_directory [OK]
Hint: Serving files? Use send_from_directory [OK]
Common Mistakes:
  • Confusing send_from_directory with render_template
  • Trying to serve files with redirect
  • Using url_for to serve files directly
2. Which of the following is the correct syntax to serve a file named example.txt from the folder uploads in Flask?
easy
A. redirect('uploads/example.txt')
B. send_file('uploads/example.txt')
C. send_from_directory('uploads', 'example.txt')
D. url_for('uploads/example.txt')

Solution

  1. Step 1: Recall the function signature

    send_from_directory takes two arguments: the folder name and the filename.
  2. Step 2: Match the syntax

    send_from_directory('uploads', 'example.txt') correctly calls send_from_directory('uploads', 'example.txt'). Options A, B, and D use incorrect functions or formats.
  3. Final Answer:

    send_from_directory('uploads', 'example.txt') -> Option C
  4. Quick Check:

    Correct syntax = send_from_directory(folder, filename) [OK]
Hint: Use send_from_directory(folder, filename) syntax [OK]
Common Mistakes:
  • Using send_file with folder and filename as one string
  • Using redirect to serve files
  • Using url_for incorrectly for file serving
3. Given this Flask route to serve uploaded files:
from flask import Flask, send_from_directory
app = Flask(__name__)

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory('uploads', filename)

What happens when a user visits /uploads/photo.png?
medium
A. The server returns a 404 error because the route is incorrect.
B. The server returns the filename as plain text.
C. The server redirects the user to the home page.
D. The file 'photo.png' is sent from the 'uploads' folder to the user.

Solution

  1. Step 1: Analyze the route and function

    The route captures the filename from the URL and calls send_from_directory with 'uploads' folder and the filename.
  2. Step 2: Understand the behavior on URL visit

    Visiting /uploads/photo.png triggers the function to send the file 'photo.png' from the 'uploads' folder to the user.
  3. Final Answer:

    The file 'photo.png' is sent from the 'uploads' folder to the user. -> Option D
  4. Quick Check:

    Route sends file from folder = The file 'photo.png' is sent from the 'uploads' folder to the user. [OK]
Hint: Route with filename uses send_from_directory to serve file [OK]
Common Mistakes:
  • Assuming route returns text instead of file
  • Thinking route redirects instead of serving file
  • Believing route is invalid and causes 404
4. Identify the error in this Flask code snippet meant to serve uploaded files:
from flask import Flask, send_from_directory
app = Flask(__name__)

@app.route('/files/<filename>')
def files(filename):
    return send_from_directory(filename, 'uploads')
medium
A. The folder and filename arguments are reversed in send_from_directory.
B. The route decorator syntax is incorrect.
C. The function name 'files' is a reserved keyword.
D. send_from_directory cannot be used inside a route.

Solution

  1. Step 1: Check send_from_directory arguments

    The function call uses send_from_directory(filename, 'uploads'), but the first argument should be the folder, second the filename.
  2. Step 2: Confirm correct argument order

    The correct call is send_from_directory('uploads', filename). The route and function name are valid, and send_from_directory is allowed in routes.
  3. Final Answer:

    The folder and filename arguments are reversed in send_from_directory. -> Option A
  4. Quick Check:

    send_from_directory(folder, filename) order matters [OK]
Hint: Folder first, filename second in send_from_directory [OK]
Common Mistakes:
  • Swapping folder and filename arguments
  • Thinking function names like 'files' are reserved
  • Believing send_from_directory can't be used in routes
5. You want to serve uploaded files securely from the folder user_uploads. Which Flask route setup correctly serves files while preventing directory traversal attacks?
hard
A.
@app.route('/files/<path:filename>')
def serve_file(filename):
    return send_from_directory('user_uploads', filename)
B.
@app.route('/files/<filename>')
def serve_file(filename):
    return send_from_directory('user_uploads', filename)
C.
@app.route('/files/<filename>')
def serve_file(filename):
    return send_file(f'user_uploads/{filename}')
D.
@app.route('/files/<filename>')
def serve_file(filename):
    return open(f'user_uploads/{filename}').read()

Solution

  1. Step 1: Understand directory traversal risks

    Allowing path:filename lets users include slashes, risking access outside the folder.
  2. Step 2: Choose safe route and function

    @app.route('/files/<filename>')
    def serve_file(filename):
        return send_from_directory('user_uploads', filename)
    uses <filename> (no slashes) and send_from_directory, which safely serves files and prevents traversal.
  3. Step 3: Evaluate other options

    @app.route('/files/<path:filename>')
    def serve_file(filename):
        return send_from_directory('user_uploads', filename)
    allows paths, risking traversal.
    @app.route('/files/<filename>')
    def serve_file(filename):
        return send_file(f'user_uploads/{filename}')
    uses send_file with string path, less safe.
    @app.route('/files/<filename>')
    def serve_file(filename):
        return open(f'user_uploads/{filename}').read()
    reads file content directly, unsafe and breaks response.
  4. Final Answer:

    Route with <filename> and send_from_directory for safe serving -> Option B
  5. Quick Check:

    Use send_from_directory with filename only to prevent traversal [OK]
Hint: Use <filename> (no path) with send_from_directory for safety [OK]
Common Mistakes:
  • Using allowing directory traversal
  • Using send_file with raw paths risking security
  • Reading file content directly instead of sending file
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