【问题标题】:Retrieving default fallback avatar image using python and GAE使用 python 和 GAE 检索默认后备头像图像
【发布时间】:2017-03-09 09:15:24
【问题描述】:

我的用户可以上传自己的图片并将其用作头像。现在,如果他们自己没有上传图片,我正在努力如何检索默认的后备图片。

头像的路径是“//mysite.com/avatar/username”。

到目前为止,我有这段代码,当用户自己上传头像时它可以正常工作,但是当我尝试检索默认图像时它给了我以下错误:

引发 IOError(errno.EACCES, '文件不可访问', 文件名)

IOError:[Errno 13] 文件不可访问:'/Users/myuser/Documents/github/mysite/static/images/profile.png'

def get(self):
    path = self.request.path.split('/')
    action = self.get_action(path)

    if action:
        e = employees.filter('username = ', action).get()

        if e.avatar:
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write(e.avatar)
        else:
            self.response.headers['Content-Type'] = 'image/png'
            path = os.path.join(os.path.split(__file__)[0], 'static/images/profile.png')
            with open(path, 'r') as f:
                print self.response.out.write(f.read())

我已在 app.yaml 中将“/static”文件夹定义为 static_dir。

我知道我可以将 profile.png 放在根文件夹中,但我更喜欢将它放在“/static/images”文件夹中。

有什么想法吗?

【问题讨论】:

  • 你检查path变量的值了吗?
  • 是的。它将路径解析为正确的路径。我更新了上面的问题以反映这一点

标签: python google-app-engine


【解决方案1】:

如果您在应用程序/服务的.yaml 配置文件中将文件本身声明为static_file 或其目录或其文件路径中的任何目录static_dir,则默认情况下,应用程序代码无法访问它。

您还需要将其配置为application_readable。来自Handlers element

应用程序可读

可选。布尔值。默认情况下,在静态文件处理程序中声明的文件 作为静态数据上传,仅提供给最终用户。他们 应用程序无法读取。如果该字段设置为 true,则 文件也作为代码数据上传,因此您的应用程序可以读取 他们。两次上传都针对您的代码和静态数据收费 存储resource quotas.

【讨论】:

  • 启用设置 application_readable 有什么缺点吗?
  • AFAIK 只是在文件配额中计算它们两次,并且因为它们被上传两次,所以部署时间更长。
  • 谢谢。您知道我是否可以将 application_readable 放在子目录中吗?例如。将 application_readable 放在 /static/images 上,但不放在 /static 中的其他目录和文件上?
  • 理论上是的,如果您在/static/images 的处理程序定义之上为/static 添加一个单独的处理程序定义,您可以对它们进行不同的配置。但我确实看到了一些可能与嵌套静态目录/文件有关的问题的报告(只是怀疑,没有证据)。见stackoverflow.com/questions/33447890/static-files-are-missing
猜你喜欢
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多