燦,
我曾在使用Blob存儲與Django的nonrel類似的經歷。
對於你的第一個問題,Blobstore並沒有矯枉過正,而且我認爲事實上,你可以上傳圖片而不更新整個項目並重新發布它。由於服務器的高複製性和安全性,GAE不允許您寫入目錄。隨着需求的增加,能夠自動啓動所有服務器是一種折衷。如果您嘗試執行任何涉及寫入目錄的操作,App Engine將會出錯。
我正在尋找更好的解決方案來解決您的第二個問題。我希望能夠通過自己的名字來引用文件。我認爲這個關鍵是將額外的屬性添加到保存時設置爲文件名的「上傳」模型。我沒有嘗試過,但它應該工作。
更新:
這個工作。
這裏是型號:
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」被替換爲「名」屬性:
{% 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 Blob存儲工作。如果其他人可以評論如何獲得適當的公共支持工作,自動生成公共URL,我將不勝感激。
格蘭特
這不是唯一的方式 - 你也可以上傳的圖片存儲在數據存儲中。不過,使用blobstore是更好的方法。 –