'required nonempty base64-bytes', 'name' => 'optional string', 'viewPolicy' => 'optional valid policy string or ', 'canCDN' => 'optional bool', ); } protected function defineReturnType() { return 'nonempty guid'; } protected function execute(ConduitAPIRequest $request) { $viewer = $request->getUser(); $name = $request->getValue('name'); $can_cdn = (bool)$request->getValue('canCDN'); $view_policy = $request->getValue('viewPolicy'); $data = $request->getValue('data_base64'); if (!phutil_nonempty_string($data)) { throw new Exception(pht('Field "data_base64" must be non-empty.')); } $data = $this->decodeBase64($data); $params = array( 'authorPHID' => $viewer->getPHID(), 'canCDN' => $can_cdn, 'isExplicitUpload' => true, ); if ($name !== null) { $params['name'] = $name; } if ($view_policy !== null) { $params['viewPolicy'] = $view_policy; } $file = PhabricatorFile::newFromFileData($data, $params); return $file->getPHID(); } }