📖 Scenario: You are building a simple web app using Flask. The app should allow users to download a text file when they visit a specific URL.
🎯 Goal: Create a Flask app that sends a file download response with a text file named example.txt containing some content.
📋 What You'll Learn
Create a Flask app instance named app
Create a route /download that triggers the file download
Use Flask's Response object to send the file content
Set the correct headers to make the browser download the file as example.txt
💡 Why This Matters
🌍 Real World
Web apps often need to let users download files like reports, images, or documents. This project shows how to send such files correctly.
💼 Career
Backend developers frequently implement file download endpoints. Knowing how to set response headers properly is essential for user-friendly downloads.
Progress0 / 4 steps
1
Set up Flask app and file content
Import Flask and create a Flask app instance called app. Then create a variable file_content with the string value 'Hello, this is a sample file for download.'.
Flask
Hint
Start by importing Flask and creating the app instance. Then assign the exact string to file_content.
2
Create download route and import Response
Import Response from flask. Then create a route /download using @app.route('/download') and define a function download_file().
Flask
Hint
Remember to import Response and use the exact route and function names.
3
Create Response with file content and headers
Inside download_file(), create a Response object named response with file_content as data and mimetype='text/plain'. Then set the header Content-Disposition to 'attachment; filename=example.txt' on response.headers. Finally, return response.
Flask
Hint
Use the Response constructor with the file content and set the header exactly as shown.
4
Add app run block for local testing
Add the standard Flask app run block: if __name__ == '__main__': and inside it call app.run(debug=true).
Flask
Hint
This block allows you to run the Flask app locally for testing.
Practice
(1/5)
1. What does the as_attachment=True parameter do when used with Flask's send_file function?
easy
A. Encrypts the file before sending it.
B. Changes the file's content type to plain text.
C. Forces the browser to download the file instead of displaying it.
D. Prevents the file from being downloaded.
Solution
Step 1: Understand send_file usage
The send_file function sends files from the server to the client in Flask.
Step 2: Role of as_attachment=True
Setting as_attachment=True tells the browser to download the file instead of trying to open or display it.
Final Answer:
Forces the browser to download the file instead of displaying it. -> Option C
Quick Check:
as_attachment=True means download file [OK]
Hint: Remember: as_attachment=True means download, not display [OK]
Common Mistakes:
Thinking it changes file content type
Assuming it encrypts the file
Believing it blocks download
2. Which of the following is the correct syntax to send a file named 'report.pdf' as a download in Flask?
easy
A. return send_file('report.pdf', as_attachment=True)
B. return send_file('report.pdf', download=True)
C. return send_file('report.pdf', attachment=True)
D. return send_file('report.pdf', force_download=True)
Solution
Step 1: Recall correct parameter for download
The correct parameter to force download is as_attachment=True.
Step 2: Check syntax correctness
return send_file('report.pdf', as_attachment=True) uses send_file('report.pdf', as_attachment=True), which is the correct syntax.
Final Answer:
return send_file('report.pdf', as_attachment=True) -> Option A
Quick Check:
Correct parameter is as_attachment=True [OK]
Hint: Use as_attachment=True to force download in send_file [OK]
Common Mistakes:
Using incorrect parameter names like download or attachment
Forgetting to set as_attachment=True
Using non-existent parameters like force_download
3. What will be the filename suggested to the user when downloading a file with this Flask code?
The download_name parameter sets the filename the browser suggests when saving the file.
Step 2: Analyze given code
The code sets download_name='user_data.csv', so the browser will suggest this name.
Final Answer:
user_data.csv -> Option B
Quick Check:
download_name sets saved filename [OK]
Hint: download_name sets the saved filename for downloads [OK]
Common Mistakes:
Assuming original filename is always used
Confusing download_name with as_attachment
Thinking no filename is suggested
4. Identify the error in this Flask code snippet intended to send a file for download:
return send_file('image.png', attachment=True)
medium
A. The parameter should be as_attachment=True, not attachment=True.
B. The filename must be absolute path, not relative.
C. send_file cannot send image files.
D. Missing download_name parameter.
Solution
Step 1: Check parameter correctness
The correct parameter to force download is as_attachment=True, not attachment=True.
Step 2: Validate other options
Relative paths are allowed, images can be sent, and download_name is optional.
Final Answer:
The parameter should be as_attachment=True, not attachment=True. -> Option A
Quick Check:
Correct parameter is as_attachment=True [OK]
Hint: Use as_attachment=True, not attachment=True [OK]
Common Mistakes:
Using attachment=True instead of as_attachment=True
Thinking download_name is mandatory
Believing relative paths are invalid
5. You want to send a PDF file named 'manual.pdf' for download but want the user to save it as 'User_Manual_2024.pdf'. Which Flask code snippet correctly achieves this?
hard
A. return send_file('manual.pdf', as_attachment=True, filename='User_Manual_2024.pdf')
B. return send_file('manual.pdf', as_attachment=False, download_name='User_Manual_2024.pdf')
C. return send_file('manual.pdf', download_name='User_Manual_2024.pdf')
D. return send_file('manual.pdf', as_attachment=True, download_name='User_Manual_2024.pdf')
Solution
Step 1: Ensure file is sent as download
Set as_attachment=True to force download instead of display.
Step 2: Set the saved filename
Use download_name='User_Manual_2024.pdf' to specify the filename suggested to the user.
Step 3: Check other options
return send_file('manual.pdf', as_attachment=False, download_name='User_Manual_2024.pdf') disables download, C misses as_attachment, D uses wrong parameter filename.
Final Answer:
return send_file('manual.pdf', as_attachment=True, download_name='User_Manual_2024.pdf') -> Option D
Quick Check:
Use as_attachment=True and download_name for filename [OK]
Hint: Use as_attachment=True and download_name to rename download [OK]
Common Mistakes:
Forgetting as_attachment=True disables download
Using filename instead of download_name
Setting as_attachment=False causes inline display
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.