2012-08-22 4 views
1

GoogleAppEngine에서 blob을 저장하고 제공하려고합니다.BlobKey를 사용하여 Google AppEngine의 BlobStore에서 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); 

일단 위의 코드를 실행하면 작동하는 것 같습니다. 그러나 기존 파일을 동일한 이름의 새 파일로 덮어 쓰려는 의도로 같은 코드를 다시 실행하면 이전 파일이 제공됩니다.

누구든지 이전 파일을 새 파일로 덮어 쓰게하는 방법을 설명 할 수 있습니까?

감사합니다.

답변

1

AFAIK, BlobInfoupload handler을 통해 blob을 업로드하는 경우에만 생성/업데이트됩니다.

blob을 FileService을 통해 '수동으로'변경하면 BlobInfo이 생성/업데이트되지 않습니다. 이 경우 수동으로 BlobInfo을 업데이트하거나 전혀 사용하지 않고 사용자 정의 엔티티에 키/이름을 저장하십시오.

0

파일이 Blobstore에 저장되어 있으면 덮어 쓸 수 없습니다.

파일을 만들 때 동일한 이름을 사용하면 파일이 Google Storage에 저장되면 덮어 쓸 수 있습니다.

+0

blobStoreService.delete (blobKeyLoaded)를 사용하여 먼저 blob을 삭제하려고하면; 그런 다음 동일한 파일 이름으로 새 BLOB를 저장 한 다음 해당 BLOB를로드합니다.이 오류가 발생합니다. 심각도 : BLOB를 찾을 수 없습니다. 더 좋은 방법이 있습니까? – itgiawa

+0

각 새로운 blob blobstore blob은 고유 한 키가 될 것입니다.이를 피할 방법이 없습니다. –

관련 문제