使用Django-nonrel和文件传输应用程序使用上传到blobstore的图像

时间:2011-06-30 22:00:57

标签: google-app-engine blobstore django-nonrel

我正在使用django-nonrel在Google App Engine中构建一个博客网站,我需要一种在博客文章等中存储和显示图像的方法。

我们的想法是让上传应用程序上传特定文章的图像等,然后使用imd src的绝对或相对URL。

我正在使用django-filetransfers上传图片(http://www.allbuttonspressed.com/projects/django-filetransfers)。

问题是: 1)是否有人使用Google App Engine和django-nonrel来托管他们的博客?如果是这样,你如何以及在哪里存储图像?是否使用GAE Blobstore进行此类使用是否过度? 2)对于图像URL我使用在flie-transfers应用程序中设置的下载路径。例如。 它是否正确?似乎有点奇怪,不使用.png扩展或任何引用。但这可能是从blobstore引用图像的方法?

仍在学习使用Django和Google App Engine的绳索,以便真正感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

能,

我在使用带有Django-nonrel的Blobstore方面有类似的经验。

对于您的第一个问题,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(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的工作,我将非常感激。

捐赠