2017-03-06 221 views
0

我使用getImageServingUrl方法來生成URL到圖像,並將其與在List of all the App Engine images service get_serving_url() URI options谷歌應用程序引擎getImageServingUrl與

列出的選項,我可以添加「d」選項來強制文件下載,而不是一起工作得很好下載文件名只是在瀏覽器中呈現它。問題是文件名默認爲「unnamed。[ext]」(其中[ext]是源文件的擴展名)。有沒有一種方法可以將原始文件名傳遞到請求的某處?

我可以使用CloudStorageTools :: serve保存給定名稱下的文件,但例如我無法使用圖像調整大小功能。

回答

0

我不知道有任何選項可以允許這樣做。 但我有另一種方式的概念,這有點複雜,但可能是一個很好的選擇。 你可以使用nginx構建一個反向代理,它將通過你自己的域爲你提供google圖像。然後,您可以將原始請求中的文件名作爲參數發送。在nginx中,您可以在代理請求之前從請求中刪除文件名參數,並將其添加爲標題以在響應中定義文件名。 這是你在nginx的配置過程非常簡單明瞭:

location /image-storage/ { 
    expires 30d; 

    #Get rid of headers to be overwritten 
    proxy_hide_header Pragma; 
    proxy_hide_header Cache-Control; 
    proxy_hide_header Content-Disposition; 

    #Add caching headers 
    add_header Pragma public; 
    add_header Cache-Control "public"; 
    #If the parameter "filename" is sent, use it as filename 
    if ($arg_filename) { 
     add_header Content-Disposition 'inline; filename="$arg_filename"'; 
    } 
    #If the parameter "dl_filename" is sent, use it as filename and init download (attachment) 
    if ($arg_dl_filename) { 
     add_header Content-Disposition 'attachment; filename="$arg_dl_filename"'; 
    } 

    #Proxy the request to google 
    proxy_pass  https://lh3.googleusercontent.com/; 
    proxy_set_header Host lh3.googleusercontent.com; 

    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

    proxy_buffering off; 
} 

這種方式就像一個網址:https://yourdomain.com/image-storage/longgoogletokenhere?dl_filename=test.jpg將被代理到https://lh3.googleusercontent.com/longgoogletokenhere?dl_filename=test.jpg和響應將獲得緩存和文件名的新頭。