

お世話になっております。

以下環境  
Java: 1.7  
Eclipse: 4.3  
GAE: 1.9.30  
Servlet: 2.5  
appengine-gcs-client: 0.5

現在GCSに画像ファイルをアップロードし、ファイルのURLを返すとの処理をServletで  
行っています。GCSとの連携はGCS Client Libraryを使用しています。

GCSにファイルをアップロードし、再度同じファイル名で別の画像をアップロードすると  
URLにアクセスした場合、最初にアップロードされたファイルが表示されます。  
GCS内で確認するとファイルは更新されているのですが、URLだけがキャッシュされているようです。

URLの生成方法は  
ImagesService#getServingUrl  
と  
aclをpublic-readにし、公開URLを取得する  
この2パターンを試しましたが、どちらもキャッシュされるようです。

このキャッシュの動作を無効化し、常に新しいファイルのURLを返して欲しいのですが、  
こうすればできたよって方いらっしゃいませんでしょうか？  
ImagesServiceを使いリサイズするといいともあったのですが、リサイズ処理なしでいきたいと  
思っております。

cacheControl(“max-age=15”)などし、キャッシュコントロールも触ってみたのですが、  
効果ありませんでした。

よろしくお願いいたします。

※追記  
無事URLが取得できました。URL差し替えの際にキャッシュされていたようです。


CC BY-SA 3.0
2016-02-27T12:44:20.173
22605
2016-03-05T08:09:47.737
2016-02-29T16:38:08.763
297
297
question
java google-app-engine servlet
GCSにアップロードしたファイルのURLが更新されない件


Image Serviceは裏側はG+Photoのインフラを使っていて、Blobstore or Cloud
Storageのファイルを、G+Photoにキャッシュしちゃってます。  
こちらは、キャッシュ期間を制御する機能は無いんじゃないかなと思います。

キャッシュをまったく利用したくないのであれば、App Engineでは、BlobstoreServiceを使って、Cloud
Storageのファイルを配信するのが良いかなと思います。  
BlobstoreServiceについては、[GAE/jでファイルを扱う
Part2](http://qiita.com/sinmetal/items/7d2617001494cd204255)
を見ていただくと良いかなと思います。  
後、すでにGCSに存在するファイルをBlobstoreServiceで扱う場合は
[Java_Using_the_Blobstore_API_with_Google_Cloud_Storage](https://cloud.google.com/appengine/docs/java/blobstore/#Java_Using_the_Blobstore_API_with_Google_Cloud_Storage)
を参考にBlobKeyを生成してください。  
実際、コード書いてみるとこんな感じですね。  
HTTP Response Headerを編集したい場合は、BlobstoreService.serve(blobKey,
response);をする前に編集しておけばOKです。

[code]

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
            BlobKey blobKey =
                    blobstoreService.createGsBlobKey("/gs/" + fileName.getBucketName() + "/"
                            + fileName.getObjectName());
            blobstoreService.serve(blobKey, response);
    
[/code]


CC BY-SA 3.0
2016-02-28T05:13:24.760
22617
2016-03-05T08:09:47.737
2016-03-05T08:09:47.737
4361
4361
22605
answer