【问题标题】:Using images uploaded to the blobstore using Django-nonrel and file-transfer application使用通过 Django-nonrel 和文件传输应用程序上传到 blobstore 的图像
【发布时间】:2011-06-30 22:00:57
【问题描述】:

我正在使用 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,我使用在 fly-transfers 应用程序中设置的下载路径。例如。 它是否正确?不使用 .png 扩展名或任何东西来引用似乎有点奇怪。但这可能是从 blobstore 引用图像的方式吗?

仍在使用 Django 和 Google App Engine 学习绳索,因此非常感谢任何帮助。

谢谢

【问题讨论】:

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


    【解决方案1】:

    可以,

    我在将 Blobstore 与 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(r'^file/(?P<filename>.+)$', 'cms.views.download_handler_filename', name='cms-download_file'),
    

    完成此操作后,您可以按文件名访问文件(这只是示例应用程序中的一个 sn-p)。如您所见,“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 Blobstore 一起工作。如果其他人可以评论如何让适当的公众支持自动生成公共 URL 的工作,我将不胜感激。

    授予

    【讨论】:

    • 这不是唯一的方法 - 您还可以将上传的图像存储在数据存储中。不过,使用 blobstore 是更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 2011-10-30
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多