2011-06-30 65 views
2

我正在Google App Engine中使用django-nonrel構建博客網站,我需要一種方式在博客文章中存儲和顯示圖像等。使用Django-nonrel和文件傳輸應用程序上傳到blobstore的圖像

這個想法是有一個上傳應用程序上傳圖像的特定文章等,然後使用絕對或相對的URL爲imd src。

我正在使用django-filetransfers上傳圖像(http://www.allbuttonspressed.com/projects/django-filetransfers)。

問題是: 1)是否有人使用Google App Engine和django-nonrel託管他們的博客?如果是的話,你如何以及在哪裏存儲圖像?正在使用GAE Blobstore來使用這個過度殺毒軟件嗎? 2)對於圖像URL,我使用在flie-transfers應用程序中設置的下載路徑。例如。 這是正確的嗎?看起來有點奇怪,不要使用.png擴展名或任何引用。但是這可能是從blobstore引用圖像的方式?

不斷學習與Django和谷歌應用引擎的繩索,所以任何幫助將非常感激。

感謝

回答

1

燦,

我曾在使用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,我將不勝感激。

格蘭特

+0

這不是唯一的方式 - 你也可以上傳的圖片存儲在數據存儲中。不過,使用blobstore是更好的方法。 –

相關問題