Может,
У меня был подобный опыт использования Blobstore с Django-nonrel.
По первому вопросу Blobstore не является чрезмерным, и я думаю, что на самом деле это единственныйТаким образом, вы можете загрузить изображение без обновления всего проекта и его повторной публикации.GAE не позволяет писать в каталог из-за высокой репликации и безопасности сервера.Это компромисс с возможностью автоматически раскручивать все серверы по мере увеличения спроса.Если вы попытаетесь сделать что-либо, связанное с записью в каталог, App Engine выдаст ошибку.
Я сам ищу лучшее решение для вашего второго вопроса.Я хотел бы иметь возможность ссылаться на файл по имени сам.Я думаю, что ключевым будет добавление дополнительного атрибута к модели «Upload», который будет установлен в имя файла во время сохранения.Я не пробовал, но он должен работать.
Обновление:
Это сработало.
Вот модель:
class UploadModel(models.Model):
title = models.CharField(max_length=64, blank=True)
file = models.FileField(upload_to='uploads/%Y/%m/%d/%H/%M/%S/')
filename = models.CharField(max_length=100, editable=False, null=True, blank=True)
def save(self, *args, **kwargs):
self.filename = self.file.name.rsplit('/', 1)[-1]
super(UploadModel, self).save(*args, **kwargs)
вот обработчик загрузки:
def download_handler(request, filename):
upload = get_object_or_404(UploadModel, filename=filename)
return serve_file(request, upload.file, save_as=True)
сопоставление URL:
url(r'^file/(?P<filename>.+)$', 'cms.views.download_handler_filename', name='cms-download_file'),
Как только вы сделаете это, вы сможете получить доступ к файлу по имени файла (это всего лишь фрагмент из примера приложения),Как вы можете видеть, pk был заменен атрибутом filename:
{% url cms-download_file filename=upload.filename as fallback_url %}
<p><img src="{% firstof upload.file|public_download_url fallback_url %}"></p>
Я застрял на себе, заставив public_download_url работать с GAE Blobstore.Если кто-то еще может прокомментировать, как создать надлежащую общедоступную поддержку, которая автоматически генерирует общедоступный URL, я был бы очень признателен.
Предоставление