2017-11-11 126 views
0

我試圖更好地理解app.yaml。App Engine - 用於圖像的app.yaml處理程序

GCP文檔建議您爲您的圖像處理程序是這樣的:

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

但是我用的是簡單得多:

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

我想明白了額外的參數和正則表達式谷歌有用過的。

Google和我的處理程序有什麼區別?

PS在我的處理程序正在工作的那一刻,但是當我使用Google處理程序時,我的圖像無法加載。

回答

2

的解釋是從Handlers elementstatic_files行:

static_files

可選。靜態文件模式處理程序將URL模式與 路徑關聯到應用程序上傳的靜態文件。 URL模式 正則表達式可以定義在構建文件路徑時使用的正則表達式分組 。您可以使用此代替 static_dir映射到目錄結構中的特定文件,而不映射整個目錄。

實施例:

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/\1 
    upload: static/.*\.(gif|png|jpg)$ 

url是所請求的路徑,同時static_filesupload是相對於你的應用/服務源目錄真正的文件路徑,與\1.*\.(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>而成,那文件名是什麼regardles會送達。

使用static_files配置,您可以只選擇要提供的特定文件名(與正則表達式模式相匹配),並且可以使它們以不同的名稱和/或與其實際相關的路徑顯示應用程序目錄。

static_files的配置,如果你提出要求,以正確的路徑應該工作,像/assets/images/<some_file>.png例如(我假定這就是存在的圖像文件)。

但是,如果你想要的,例如,服務於位於根據該assets/images DIR文件,但只是要求爲/<some_file>.png(即沒有該路徑前綴),你需要以不同的方式進行配置:

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

而且檢查您沒有重疊static_dir和/或static_files路徑配置 - 這可能會導致模糊的問題,請參閱Static files are missing

相關問題