1

我正在尝试保存然后在 GoogleAppEngine 上提供 blob。

// Save the data as a blob
final FileService fileService = FileServiceFactory.getFileService();
final AppEngineFile file = fileService.createNewBlobFile("application/zip", "nameOfSavedFile");
final FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
writeChannel.write(ByteBuffer.wrap(data));
writeChannel.closeFinally();

// Load the blob data
Query query = new Query("__BlobInfo__"); 
query.addFilter("filename", FilterOperator.EQUAL, "nameOfSavedFile"); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
PreparedQuery pq = datastore.prepare(query); 
List<Entity> entList = pq.asList(FetchOptions.Builder.withLimit(1)); 
String blobKeyString = entList.get(0).getKey().getName();

BlobstoreService blobStoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKeyLoaded = new BlobKey(blobKeyString);
blobStoreService.serve(blobKeyLoaded,response);

如果我运行上面的代码一次它似乎工作。但是,当我再次运行相同的代码以用同名的新文件覆盖现有文件时,它只会为旧文件提供服务。

谁能解释一下如何用新文件覆盖旧文件?

谢谢!

4

2 回答 2

1

AFAIK,仅当您通过上传处理​​程序BlobInfo上传 blob 时才会生成/更新。

如果您“手动”更改 blob,即通过FileService,则BlobInfo不会创建/更新。在这种情况下,您应该BlobInfo手动更新,或者根本不使用它,只需将密钥/名称存储在您的自定义实体中。

于 2012-08-22T07:11:14.763 回答
0

如果文件存储在 Blobstore 中,则无法覆盖该文件。

如果您在创建文件时使用相同的名称,则可以覆盖存储在Google Storage中的文件。

于 2012-08-22T03:36:04.710 回答