Добавьте этот импорт:
from cherrypy.lib import file_generator
import StringIO
и затем выполните следующее:
def index(self):
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
cherrypy.response.headers['Content-Type'] = "image/png"
buffer = StringIO.StringIO()
surface.write_to_png(buffer)
buffer.seek(0)
return file_generator(buffer)
Дополнительно, если вы обслуживаете автономный файл (т. Е. Он не является частью веб-страницы).) и вы не хотите, чтобы он отображался в браузере, а обрабатывались как файл для сохранения на диске, тогда вам нужен еще один заголовок:
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="file.png"'
Кроме того, лучше создатьи держать это изображение в памяти (как я пытаюсь сделать) или записать его на диск в качестве временного файла и отправить его оттуда?Мне нужно только одно изображение, затем оно может быть удалено.
Если единственное, что вы хотите сделать, - это передать этот файл в браузер, то нет причин создавать его на диске насервер.Наоборот, помните, что доступ к жесткому диску снижает производительность.