2013-03-06 188 views
1

我想用FileService在Blobstore上創建一個文件。FileServiceFactory getBlobKey拋出IllegalArgumentException

代碼如下所示:

public static BlobKey save(String mimeType, String value, String filename) throws IOException 
{ 
    FileService svc = FileServiceFactory.getFileService(); 
    AppEngineFile file = filename == null ? svc.createNewBlobFile(mimeType) : svc.createNewBlobFile(mimeType, filename); 
    key = svc.getBlobKey(file); //throws exception 
} 

,但我得到以下異常:

java.lang.IllegalArgumentException: creation_handle: String properties must be 500 characters or less. 
Instead, use com.google.appengine.api.datastore.Text, which can store strings of any length. 
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:242) 
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:207) 
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:173) 
    at com.google.appengine.api.datastore.Query$FilterPredicate.<init>(Query.java:900) 
    at com.google.appengine.api.datastore.Query$FilterOperator.of(Query.java:75) 
    at com.google.appengine.api.datastore.Query.addFilter(Query.java:351) 
    at com.google.appengine.api.files.FileServiceImpl.getBlobKey(FileServiceImpl.java:329) 

回答

1

解決了這一問題。

我必須確保以下幾點:

  1. 我叫openWriteChannel
  2. 寫一些內容(可選)
  3. 關閉通道(closecloseFinally
  4. 然後調用getBlobKey

這確保getCachedKey方法被稱爲(我猜是這樣)或createHandle可用。

我之前在寫內容之前試圖getBlobKey

相關問題