App Engine - app.yaml 图像处理程序

App Engine - app.yaml handler for images

我正在努力更好地理解 app.yaml。

GCP 文档建议像这样为您的图像创建处理程序:

# Serve images as static resources.
- url: /(.+\.(gif|png|jpg))$
  static_files: 
  upload: .+\.(gif|png|jpg)$
  application_readable: true

不过我用的更简单:

- url: /assets/images
  static_dir: assets/images

我想了解Google使用的额外参数和正则表达式。

Google 和我的处理程序有什么区别?

PS 目前我的处理程序正在工作,但是当我使用 Google 处理程序时,我的图像不会加载。

解释在 Handlers element table:

static_files

static_files

Optional. A static file pattern handler associates a URL pattern with paths to static files uploaded with the application. The URL pattern regular expression can define regular expression groupings to be used in the construction of the file path. You can use this instead of static_dir to map to specific files in a directory structure without mapping the entire directory.

Example:

handlers:
# All URLs ending in .gif .png or .jpg are treated as paths to
# static files in the static/ directory. The URL pattern is a
# regular expression, with a grouping that is inserted into the
# path to the file.
- url: /(.*\.(gif|png|jpg))$
  static_files: static/
  upload: static/.*\.(gif|png|jpg)$

url 是请求的路径,而 static_filesupload 是相对于 app/service 源目录的真实文件路径,</code> 和 <code>.*\.(gif|png|jpg)$ 分别替换为 url 正则表达式匹配分组值 - 外圆括号内的任何内容。

因此对 /a_file.gif 的请求将匹配 url 正则表达式,生成 a_file.gif 分组。它将被替换为 static_filesupload 作为 static/a_file.gif - 您的应用程序源代码中文件的实际路径。

使用你的 static_dir 配置 任何存在于 assets/images 下的 文件,如果对 /assets/images/<the_file> 的匹配请求被发出,不管该文件名是什么。

使用 static_files 配置,您可以 select 仅提供特定的文件名(匹配正则表达式模式),并且您可以使它们以不同的名称出现 and/or与它们真正相对于应用程序目录的路径不同。

如果您向正确的路径发出请求,例如 /assets/images/<some_file>.png,您的 static_files 配置 应该 正常工作(我假设那是您的图像文件所在的位置存在)。

但是,例如,如果您想要为位于 assets/images 目录下的文件提供服务,但仅请求为 /<some_file>.png(即没有该路径前缀),您需要对其进行不同的配置:

# Serve images as static resources.
- url: /(.+\.(gif|png|jpg))$
  static_files: assets/images/
  upload: assets/images/.+\.(gif|png|jpg)$

还要检查您是否配置了重叠的 static_dir and/or static_files 路径 - 这可能会导致难以理解的问题,请参阅