は、
私は、Djangoの-nonrelでブロブストアを使用して似たような経験を持っていたことができます。
あなたの最初の質問では、Blobstoreは過労ではなく、プロジェクト全体を更新して再公開することなくイメージをアップロードできる唯一の方法だと思います。 GAEでは、サーバーのレプリケーションとセキュリティが高いため、ディレクトリに書き込むことはできません。これは、需要が増えるにつれてすべてのサーバーを自動的にスピンアップできることとのトレードオフです。ディレクトリに書き込むことを含む何かをしようとすると、App Engineはエラーになります。
私はあなた自身の2番目の質問に対するより良い解決策を探しています。自分で名前を参照できるようにしたいと思います。私は、保存時にファイル名に設定される "アップロード"モデルに余分な属性を追加することを考えています。私はそれを試していないが、それは動作するはずです。
更新:
これが働いていました。ここで
はモデルである:ここ
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'),
一度これを行うあなたがして、ファイルにアクセスすることができますfilename(これはサンプルアプリケーションのスニペットです)。あなたは「PK」を見ることができるように「ファイル名」属性に置き換えた:私は自分自身に引っかかっています何
{% url cms-download_file filename=upload.filename as fallback_url %}
<p><img src="{% firstof upload.file|public_download_url fallback_url %}"></p>
はGAEブロブストアで動作するように「public_download_url」を取得しています。他の誰かが、公開URLを自動的に生成する適切な公開者をどのようにバックアップするのかについてコメントできたら、私はそれを高く評価します。
グラント
アップロードした画像をデータストアに保存することもできます。しかし、ブロブストアを使う方が良い方法です。 –