禁用Google云端存储上的文件缓存(灵活的应用引擎java)

时间:2017-07-12 15:43:35

标签: java google-app-engine google-cloud-storage app-engine-flexible

在FLEXIBLE谷歌应用引擎的Java中,如何禁用文件缓存?我不关心它是使用gsutil在整个存储桶上禁用,还是在保存它们时或者在读取它们时禁用单个文件。 (我只是不希望任何缓存,因为文件经常被替换并使用相同的文件名)。

我存储文件的代码:

  private static Storage storageService;

 public static void uploadStream(
        String name, InputStream stream, String bucketName)
        throws IOException, GeneralSecurityException {

    Storage storage = StorageOptions.getDefaultInstance().getService();


    Blob blob = storage.create(BlobInfo.newBuilder(bucketName, name).build(),stream);}

此代码可以完美地上传和替换pdf文件。当用户在网页上查看pdf时,如果它最近被替换,则会看到缓存副本。需要一个小时才能在网站上查看新版本。

我不确定这是否需要编辑存储桶,在java中保存文件时不设置缓存,或者在读取文件时不设置缓存。我读取文件的代码是:

public ByteArrayOutputStream downloadStream (String bucketName, String filePath)
        throws Exception {

    Storage storage = getService();

    byte [] bytes = storage.readAllBytes(bucketName,filePath); 


     ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
     baos.write(bytes, 0, bytes.length);


    return baos;
}

然后通过Web servlet返回。

标准谷歌应用引擎也被标记,因为这实际上是谷歌云存储问题,我不确定解决方案是否位于gsutil或云控制台,但请注意访问谷歌云存储的Java代码灵活与标准之间会有所不同。

1 个答案:

答案 0 :(得分:0)

如果对象是公共可读的并且Cache-Control标头允许缓存,则它们是可缓存的。因此,您可以通过更改这两个中的任何一个来禁用缓存。请参阅此gsutil文档,了解有关设置Cache-Control标头的信息,例如:

https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata#cache-control