Web2py: как я должен отображать загруженное изображение, которое хранится в базе данных? - PullRequest
11 голосов
/ 13 июня 2011

Есть ли способ web2py для отображения изображений из таблицы базы данных?

Пример:

Модель:

db.define_table=('images',Field('picture', 'upload' ))

Контроллер:

def somefunction(): to get the image.

Как именно я должен "прочитать" изображение из базы данных?

Вид:

<img src="{{somefunction}}" />

Ответы [ 2 ]

16 голосов
/ 14 июня 2011

Как таковая, ваша модель не будет хранить изображение в базе данных - вместо этого она сохранит изображение в файловой системе, а ее новое имя файла будет сохранено в базе данных (в поле 'picture').Если вы хотите сохранить само изображение в базе данных, используйте следующее:

db.define_table('images',
    Field('picture', 'upload', uploadfield='picture_file')
    Field('picture_file', 'blob'))

Независимо от того, храните ли вы изображения в файловой системе или в базе данных, вы можете использовать один и тот же метод для их получения.Приложение приветствия scaffolding включает следующее действие download() в контроллере default.py:

def download():
    return response.download(request, db)

Чтобы получить изображение, просто выполните что-то вроде:

<img src="{{=URL('default', 'download', args=picture_name)}}" />

где picture_name - это значение, хранящееся в поле 'picture' таблицы 'images' для конкретного изображения, которое вы хотите получить.

Для получения дополнительной информации см. здесь и здесь .

Если вам нужна дополнительная помощь, попробуйте задать вопрос в списке рассылки .

2 голосов
/ 13 февраля 2015

В качестве альтернативы, если вы используете стандартный способ загрузки изображений в виде файлов в web2py, вы можете использовать:

В моделях:

db.define_table('images',Field('picture','upload'))

В контроллерах:

def somefunction():
    pic = db(db.images).select().first().picture   #select first picture
    return dict(pic=pic)

И в представлении default / somefunction.html:

{{extend 'layout.html'}}
<img  src="{{=URL( 'download', args=pic)}}" />

Я знаю, что прошло некоторое время после первоначального вопроса, но подумал, что это может быть полезно, так как мне потребовалось некоторое время, чтобы выяснить.

...