2013-03-06 71 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

相关问题