2017-03-06 214 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和响应将获得缓存和文件名的新头。