["python","binary","flask"]
Flask to return image stored in database

My images are stored in a MongoDB, and I'd like to return them to the client, here is how the code is like: @app.route("/images/<int:pid>.jpg") def getImage(pid): # get image binary from MongoDB, which is bson.Binary type return image_binary However, it seems that I can't return binary directly in Flask? My idea so far: Return the base64 of the image binary. The problem is that IE<8 doesn't support this. Create a temporary file then return it with send_file. Are there better solutions?
Create a response object with the data and then set the content type header. Set the content disposition header to attachment if you want the browser to save the file instead of displaying it. @app.route('/images/<int:pid>.jpg') def get_image(pid): image_binary = read_image(pid) response = make_response(image_binary) response.headers.set('Content-Type', 'image/jpeg') response.headers.set( 'Content-Disposition', 'attachment', filename='%s.jpg' % pid) return response Relevant: werkzeug.Headers and flask.Response You can pass a file-like object and the header arguments to send_file to let it set up the complete response. Use io.BytesIO for binary data: return send_file( io.BytesIO(image_binary), mimetype='image/jpeg', as_attachment=True, download_name='%s.jpg' % pid) Prior to Flask 2.0, download_name was called attachment_filename.