2013-06-24 3 views
1

В настоящее время у меня есть два варианта сохранения некоторых изображений в blobstore.Правильный способ хранения изображений blob на GAE

У меня есть модель пользователя class User(db.Model), где я сохраняю аватар для пользователя. Один из вариантов - сохранить аватар как blobstore.BlobReferenceProperty(), а затем передать изображение с помощью get_serving_url из справки user.avatar.

class User(db.Model): 
    avatar = blobstore.BlobReferenceProperty() 

url = get_serving_url(user.avatar) 

Другой вариант, чтобы получить путь к изображению с get_serving_url() и сохранить его в модели пользователя как LinkProperty, а затем просто использовать эту ссылку, чтобы служить изображение.

url = get_serving_url(image_file) 
class User(db.Model): 
    avatar = db.LinkProperty() 

Есть ли существенная разница в двух подходах, и если да, то что предпочтительнее? Благодарю.

ответ

2

Вы должны сохранить оба. BlobReference, чтобы иметь возможность удалять фактический blob и URL-адрес, чтобы избежать вызова каждый раз, когда get_serving_url(), что может быть потенциально медленным. URL-адрес, который возвращается get_serving_url(), неизменен, если не вызывается delete_serving_url(), если его нужно сбросить, поскольку этот URL является общедоступным, но неопознанным.

+1

На всякий случай не ясно, get_serving_url потенциально медленный, поэтому сохранение URL-адреса поможет быстрее загружать вашу страницу. – dragonx

+0

@dragonx Я обновил свой ответ, чтобы подчеркнуть его – Lipis

+0

Отлично! Благодарю. –

0

Используйте BlobReferenceProperty. Если вы храните функцию serve_url, вы не можете удалить blob, так как у вас нет ссылки на него.

1

Вы должны сохранить обе ссылки в своей модели. Вы используете blobReferenceProperty для ссылки на последнюю версию blob для обслуживания (удаление и обновление) и URL-адрес для обслуживания изображения, потому что вам нужно только один раз получить обслуживающий URL-адрес.