Good question. The best way to do this is to use an intermediate BytesIO objects to buffer the data. Something like this:
import anvil
from io import BytesIO
def write_media():
  data = BytesIO()
  # ... do something that writes to 'data' as a file here ...
  # For example:
  data.write("foo")
  # Now reset the stream so you can read from it:
  data.seek(0)
  return anvil.BlobMedia("text/plain", data.read(), name="my_file.txt")
Hope that helps!