在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代码灵活与标准之间会有所不同。
答案 0 :(得分:0)
如果对象是公共可读的并且Cache-Control标头允许缓存,则它们是可缓存的。因此,您可以通过更改这两个中的任何一个来禁用缓存。请参阅此gsutil文档,了解有关设置Cache-Control标头的信息,例如:
https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata#cache-control