【问题标题】:Disable caching of files on google cloud storage (flexible app engine java)禁用谷歌云存储上的文件缓存(灵活的应用程序引擎 java)
【发布时间】:2017-07-12 15:43:35
【问题描述】:

在灵活的谷歌应用引擎上的 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 代码灵活和标准之间会有所不同。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我读到对象只有在公开可读的情况下才可缓存......但是,存储桶绝对设置为不公开,我无法将文件的地址输入到Web 浏览器来查看它.... 我将如何明确设置文件在 java 中不可公开读取,以及缓存控制标头?我发现灵活的应用引擎文档严重缺乏光泽......
    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 2014-10-30
    • 1970-01-01
    • 2021-11-30
    • 2018-05-09
    • 2014-08-17
    • 2015-02-01
    • 2015-05-16
    相关资源
    最近更新 更多