public AppEngineFile createNewBlobFile(String mimeType, String uploadedFileName)
      throws IOException {
    if (mimeType == null || mimeType.trim().isEmpty()) {
      mimeType = DEFAULT_MIME_TYPE;
    }

    Map<String, String> params = new TreeMap<String, String>();
    params.put(PARAMETER_MIME_TYPE, mimeType);
    if (uploadedFileName != null && !uploadedFileName.isEmpty()) {
      params.put(PARAMETER_BLOB_INFO_UPLOADED_FILE_NAME, uploadedFileName);
    }
    String filePath =
        createFilePath(
            FILESYSTEM_BLOBSTORE, null, FileServicePb.FileContentType.ContentType.RAW, params);
    AppEngineFile file = new AppEngineFile(filePath);
    if (!file.getNamePart().startsWith(CREATION_HANDLE_PREFIX)) {
      throw new RuntimeException("Expected creation handle: " + file.getFullPath());
    }
    return file;
  }
 public FileReadChannel openReadChannel(AppEngineFile file, boolean lock)
     throws FileNotFoundException, LockException, IOException {
   GridFilesystem gfs = getGridFilesystem();
   return new JBossFileReadChannel(gfs.getInput(file.getFullPath())); // TODO lock?
 }