上传图片以及Google App Engine

时间:2008-10-02 03:05:30

标签: google-app-engine yaml image-uploading

我正在开发Google App Engine项目。

我的应用在本地工作正常,但当我尝试在图片目录中上传图片时,他们没有在appspot上显示。

作为一个小故障,我在“/images/page2.html”中放置了一个HTML页面,我可以在appspot上加载该页面,但我的页面不显示我的图像。所以,这对我的道路来说不是问题。

作为另一个健全性检查,我还要上传一个带有.css代码的样式表目录,并且正在正确读取。

我怀疑问题出在我的app.yaml文件中。

有什么想法吗?

我不想在这里粘贴所有代码,但这里有一些关键行。前两个工作正常。第三个不起作用:

<link type="text/css" rel="stylesheet" href="/stylesheets/style.css" />
<a href="/images/Page2.html">Page 2</a>
<img src="/images/img.gif">

这是我的app.yaml文件

application: myApp
version: 1
runtime: python
api_version: 1

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /images
  static_dir: images

- url: /.*
  script: helloworld.py

5 个答案:

答案 0 :(得分:4)

您必须为静态内容配置app.yaml,例如图像和css文件

示例:

 url: /(.*\.(gif|png|jpg))
  static_files: static/\1
  upload: static/(.*\.(gif|png|jpg))

了解更多信息: http://code.google.com/appengine/docs/configuringanapp.html

答案 1 :(得分:2)

我敢打赌你的问题是你正在使用Windows。

如果是这种情况,我相信你的static_dir值需要一个前面的斜杠。

答案 2 :(得分:1)

我正在使用Java版本的App引擎,我遇到了类似的问题,服务器无法提供静态图像。

在我的案例中最终改变AppEngine配置文件“appengine-web.xml”以包含

<static-files>
<include path="**.*"/>
    <include path="/images/**.*" />
</static-files>

我的图片位于/ images目录中,HTML和CSS位于。目录在WEB-INF级别

答案 3 :(得分:0)

@jamtoday前面的斜杠没有什么区别,但它确实让我开始弄清楚每个应用程序需要告诉我的目录结构是什么。

所以,我没有什么非常有说服力的补充,但我想跟进,因为我得到了它的工作,但我没有在我开始工作后探索所有问题。

有一个改变是停止在HwlloWorld / src /目录下工作并开始在HelloWorld /目录中工作。似乎dev_appserver拾取了所有依赖项,但远程服务器没有。本质上,我本地链接的相对路径与上传后链接的相对路径不匹配。

我还意识到dev-appserver依赖于.yaml文件以及appcfg脚本。那是。 。 。如果你在项目中添加一个目录,然后尝试链接到该目录中的文件,你需要将该目录添加到.yaml文件中,然后重新启动dev-appserver来获取它。

因此,如果您为.yaml文件提供正确的信息,可能有办法处理我最初尝试做的事情,但是更改为不同的目录结构在本地处理它。

答案 4 :(得分:0)

<img src="/images/img.gif">

此行无法显示图像。 试试这个:

1 - 创建一个类来处理“图像请求”

class GetImage(webapp.RequestHandler):
      def get(self):
       self.response.headers['Content-Type'] = 'image/jpg'
       self.response.out.write(image_object)

2 - 在你的page.html中:

<img src="/image"

3 - 在code.py中的main函数:

application = webapp.WSGIApplication(('/image', GetImage), debug=True)

玩得开心