我的用例:我不使用 blobstore 上传和下载文件。我使用 blobstore 来存储我的程序正在创建的非常大的字符串。通过持久化存储 blob 的路径,我可以稍后再次加载字符串(请参阅文档)
我的问题:是否有更简单的方法来访问 blob 内容而无需存储路径?BlobstoreService 只允许我直接服务于 HttpServletReponse。
我的用例:我不使用 blobstore 上传和下载文件。我使用 blobstore 来存储我的程序正在创建的非常大的字符串。通过持久化存储 blob 的路径,我可以稍后再次加载字符串(请参阅文档)
我的问题:是否有更简单的方法来访问 blob 内容而无需存储路径?BlobstoreService 只允许我直接服务于 HttpServletReponse。
您只需要存储一个 BlobKey - 永远不需要存储路径(文件与否)。
要访问 blob 的内容:
BlobstoreService blobStoreService = BlobstoreServiceFactory.getBlobstoreService();
String myString =
new String(blobStoreService.fetchData(blobKey, 0, BlobstoreService.MAX_BLOB_FETCH_SIZE-1);
编辑:如果你有一个很长的字符串,你可以使用任何标准的方式通过从循环中的 blob 中获取数据来将字节数组读入字符串。
我猜当您说“保留存储 blob 的路径”时,您的意思是BlobKey
?
FileService
允许您直接访问 blob 数据:
// Get a file service
FileService fileService = FileServiceFactory.getFileService();
// Get a file backed by blob
AppEngineFile file = fileService.getBlobFile(blobKey)
// get a read channel
FileReadChannel readChannel = fileService.openReadChannel(file, false);
// Since you store a String, I guess you want to read it a such
BufferedReader reader = new BufferedReader(Channels.newReader(readChannel, "UTF8"));
// Do this in loop unitil all data is read
String line = reader.readLine();