protected function processActionShowFile() { $fileName = $this->file->getName(); $fileData = $this->file->getFile(); if (!$fileData) { $this->end(); } $isImage = TypeFile::isImage($fileData["ORIGINAL_NAME"]); $cacheTime = $isImage ? 86400 : 0; $width = $this->request->getQuery('width'); $height = $this->request->getQuery('height'); if ($isImage && ($width > 0 || $height > 0)) { $signature = $this->request->getQuery('signature'); if (!$signature) { $this->sendJsonInvalidSignResponse('Empty signature'); } if (!ParameterSigner::validateImageSignature($signature, $this->file->getId(), $width, $height)) { $this->sendJsonInvalidSignResponse('Invalid signature'); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $tmpFile = \CFile::resizeImageGet($fileData, array("width" => $width, "height" => $height), $this->request->getQuery('exact') == "Y" ? BX_RESIZE_IMAGE_EXACT : BX_RESIZE_IMAGE_PROPORTIONAL, true, false, true); $fileData["FILE_SIZE"] = $tmpFile["size"]; $fileData["SRC"] = $tmpFile["src"]; } \CFile::viewByUser($fileData, array('force_download' => false, 'cache_time' => $cacheTime, 'attachment_name' => $fileName)); }
/** * @param array $values * @return array */ public function filter(array $values) { if ($values['get']['action'] == 'showFile') { if ($values['get']['preview'] == 'Y') { $values['get']['width'] = 204; $values['get']['height'] = 119; $values['get']['signature'] = \Bitrix\Disk\Security\ParameterSigner::getImageSignature($values['get']['fileId'], $values['get']['width'], $values['get']['height']); } else { unset($values['get']['width'], $values['get']['height']); } unset($values['get']['exact']); } else { $values['get']['action'] = 'downloadFile'; } return array('get' => $values['get']); }
public static function getUFForPostForm($arParams) { $arFileData = array(); $arUF = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields($arParams["ENTITY_TYPE"], $arParams["ENTITY_ID"], LANGUAGE_ID); $ufCode = $arParams["UF_CODE"]; if (!empty($arUF[$ufCode]) && !empty($arUF[$ufCode]["VALUE"])) { if ($arParams["IS_DISK_OR_WEBDAV_INSTALLED"]) { if (\Bitrix\Main\Config\Option::get('disk', 'successfully_converted', false) && CModule::IncludeModule('disk')) { $userFieldManager = \Bitrix\Disk\Driver::getInstance()->getUserFieldManager(); $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager(); $userFieldManager->loadBatchAttachedObject($arUF[$ufCode]["VALUE"]); foreach ($arUF[$ufCode]["VALUE"] as $attachedId) { $attachedObject = $userFieldManager->getAttachedObjectById($attachedId); if ($attachedObject) { $file = $attachedObject->getObject(); $fileName = $file->getName(); $fileUrl = $urlManager->getUrlUfController('download', array('attachedId' => $attachedId)); $fileUrl = str_replace("/bitrix/tools/disk/uf.php", SITE_DIR . "mobile/ajax.php", $fileUrl); $fileUrl = $fileUrl . (strpos($fileUrl, "?") === false ? "?" : "&") . "mobile_action=disk_uf_view&filename=" . $fileName; if (\Bitrix\Disk\TypeFile::isImage($file) && ($realFile = $file->getFile())) { $previewImageUrl = $urlManager->getUrlUfController('show', array('attachedId' => $attachedId, 'width' => 144, 'height' => 144, 'exact' => 'Y', 'signature' => \Bitrix\Disk\Security\ParameterSigner::getImageSignature($attachedId, 144, 144))); } else { $previewImageUrl = false; } $icon = CMobileHelper::mobileDiskGetIconByFilename($fileName); $iconUrl = CComponentEngine::makePathFromTemplate('/bitrix/components/bitrix/mobile.disk.file.detail/images/' . $icon); $fileFata = array('type' => $file->getExtension(), 'ufCode' => $ufCode, 'id' => $attachedId, 'extension' => $file->getExtension(), 'name' => $fileName, 'url' => $fileUrl, 'iconUrl' => $iconUrl); if ($previewImageUrl) { $fileFata['previewImageUrl'] = CHTTP::URN2URI($previewImageUrl); } $arFileData[] = $fileFata; } } } else { $data = CWebDavIblock::getRootSectionDataForUser($GLOBALS["USER"]->GetID()); if (is_array($data)) { $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array('ID' => $arUF[$ufCode]["VALUE"], 'IBLOCK_ID' => $data["IBLOCK_ID"]), false, false, array('ID', 'IBLOCK_ID', 'PROPERTY_FILE')); while ($arWDFile = $dbWDFile->Fetch()) { if ($arFile = CFile::GetFileArray($arWDFile["PROPERTY_FILE_VALUE"])) { if (CFile::IsImage($arFile["FILE_NAME"], $arFile["CONTENT_TYPE"])) { $imageResized = CFile::ResizeImageGet($arFile["ID"], array("width" => 144, "height" => 144), BX_RESIZE_IMAGE_EXACT, false, true); $previewImageUrl = $imageResized["src"]; } else { $previewImageUrl = false; } $fileExtension = GetFileExtension($arFile["FILE_NAME"]); $fileData = array('type' => $fileExtension, 'ufCode' => $ufCode, 'id' => $arWDFile["ID"], 'extension' => $fileExtension, 'name' => $arFile["FILE_NAME"], 'url' => $arFile["SRC"]); if ($previewImageUrl) { $fileData['previewImageUrl'] = CHTTP::URN2URI($previewImageUrl); } $arFileData[] = $fileData; } } } } } else { $dbRes = CFile::GetList(array(), array("@ID" => implode(",", $arUF[$ufCode]["VALUE"]))); while ($arFile = $dbRes->GetNext()) { if (CFile::IsImage($arFile["FILE_NAME"], $arFile["CONTENT_TYPE"])) { $imageResized = CFile::ResizeImageGet($arFile["ID"], array("width" => 144, "height" => 144), BX_RESIZE_IMAGE_EXACT, false, true); $previewImageUrl = $imageResized["src"]; } else { $previewImageUrl = false; } $fileExtension = GetFileExtension($arFile["FILE_NAME"]); $fileData = array('type' => $fileExtension, 'ufCode' => $ufCode, 'id' => $arFile["ID"], 'extension' => $fileExtension, 'name' => $arFile["FILE_NAME"], 'downloadUrl' => $arFile["SRC"]); if ($previewImageUrl) { $fileData['previewImageUrl'] = CHTTP::URN2URI($previewImageUrl); } $arFileData[] = $fileData; } } } return $arFileData; }
$file["BASIC"] = array("src" => $file["ORIGINAL"]["src"] . "&" . http_build_query(array_merge($arParams["SCREEN_SIZE"], array('signature' => ParameterSigner::getImageSignature($file['ID'], $arParams["SCREEN_SIZE"]["width"], $arParams["SCREEN_SIZE"]["height"])))), "width" => $arDestinationSize["width"], "height" => $arDestinationSize["height"]); } } $arResult["FILES"][$id] = $images[$id] = $file; } else { $files[$id] = $file; } } if ($this->__page == "show") { $arResult['IMAGES'] = $images; $arResult['FILES'] = $files; } } elseif (strpos($this->__page, "error") === false) { $arParams["THUMB_SIZE"] = 100; $http_query = array("cache_image" => "Y", "width" => $arParams["THUMB_SIZE"], "height" => $arParams["THUMB_SIZE"]); foreach ($arResult['FILES'] as $id => $arElement) { if (array_key_exists("IMAGE", $arElement)) { $http_query['signature'] = ParameterSigner::getImageSignature($arElement['ID'], $arParams["THUMB_SIZE"], $arParams["THUMB_SIZE"]); CFile::ScaleImage($arElement["IMAGE"]["WIDTH"], $arElement["IMAGE"]["HEIGHT"], array("width" => $arParams["THUMB_SIZE"], "height" => $arParams["THUMB_SIZE"]), BX_RESIZE_IMAGE_PROPORTIONAL, $bNeedCreatePicture, $arSourceSize, $arDestinationSize); if ($bNeedCreatePicture) { $arElement["original"] = array("src" => $arElement["URL_GET"], "width" => $arElement["IMAGE"]["WIDTH"], "height" => $arElement["IMAGE"]["HEIGHT"]); $arElement["IMAGE"]["WIDTH"] = $arDestinationSize["width"]; $arElement["IMAGE"]["HEIGHT"] = $arDestinationSize["height"]; if (array_key_exists("PREVIEW_URL", $arElement)) { $arElement["PREVIEW_URL"] .= (strpos($arElement["PREVIEW_URL"], "?") === false ? "?" : "&") . http_build_query($http_query); } $arResult['FILES'][$id] = $arElement; } } } }
define("STOP_STATISTICS", true); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); if(!\Bitrix\Main\Loader::includeModule('disk')) { die; } if($_GET['action'] == 'showFile') { if ($_GET['preview'] == 'Y') { $_GET['width'] = 204; $_GET['height'] = 119; $_GET['signature'] = \Bitrix\Disk\Security\ParameterSigner::getImageSignature($_GET['fileId'], $_GET['width'], $_GET['height']); } else { unset($_GET['width']); unset($_GET['height']); } unset($_GET['exact']); } else { $_GET['action'] = 'downloadFile'; } if($_SERVER['REQUEST_METHOD'] == 'POST') {
protected function processActionDownloadFile() { $this->checkRequiredGetParams(array('attachedId')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $fileModel = null; list($type, $realValue) = FileUserType::detectType($this->request->getQuery('attachedId')); if ($type == FileUserType::TYPE_NEW_OBJECT) { /** @var File $fileModel */ $fileModel = File::loadById((int) $realValue, array('STORAGE')); if (!$fileModel) { $this->errorCollection->add(array(new Error("Could not find file"))); $this->sendJsonErrorResponse(); } if (!$fileModel->canRead($fileModel->getStorage()->getCurrentUserSecurityContext())) { $this->errorCollection->add(array(new Error("Bad permission. Could not read this file"))); $this->sendJsonErrorResponse(); } $fileName = $fileModel->getName(); $fileData = $fileModel->getFile(); if (!$fileData) { $this->end(); } $cacheTime = 0; $width = $this->request->getQuery('width'); $height = $this->request->getQuery('height'); if (TypeFile::isImage($fileData["ORIGINAL_NAME"]) && ($width > 0 || $height > 0)) { $signature = $this->request->getQuery('signature'); if (!$signature) { $this->sendJsonInvalidSignResponse('Empty signature'); } if (!ParameterSigner::validateImageSignature($signature, $fileModel->getId(), $width, $height)) { $this->sendJsonInvalidSignResponse('Invalid signature'); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $tmpFile = \CFile::resizeImageGet($fileData, array("width" => $width, "height" => $height), $this->request->getQuery('exact') == "Y" ? BX_RESIZE_IMAGE_EXACT : BX_RESIZE_IMAGE_PROPORTIONAL, true, false, true); $fileData["FILE_SIZE"] = $tmpFile["size"]; $fileData["SRC"] = $tmpFile["src"]; $cacheTime = 86400; } \CFile::viewByUser($fileData, array("force_download" => false, "cache_time" => $cacheTime, 'attachment_name' => $fileName)); } else { $this->errorCollection->add(array(new Error('Could not find attached object'))); $this->sendJsonErrorResponse(); } }
} } if ($bExactly && $circumscribed) { CFile::ScaleImage($arSize["width"], $arSize["height"], $circumscribed, BX_RESIZE_IMAGE_PROPORTIONAL, $bNeedCreatePicture, $arSourceSize, $arSize); } $file["INLINE"]["width"] = $bExactly ? $arSize["width"] : $arDestinationSize["width"]; $file["INLINE"]["height"] = $bExactly ? $arSize["height"] : $arDestinationSize["height"]; // gallery $max_real_dimension = max(array(intval($file["IMAGE"]["WIDTH"]), intval($file["IMAGE"]["HEIGHT"]))); if ($max_real_dimension > $max_dimension) { $arParams["SCREEN_SIZE"] = array("width" => $max_dimension, "height" => $max_dimension); } else { $arParams["SCREEN_SIZE"] = array("width" => $max_real_dimension, "height" => $max_real_dimension); } CFile::ScaleImage($file["IMAGE"]["WIDTH"], $file["IMAGE"]["HEIGHT"], $arParams["SCREEN_SIZE"], BX_RESIZE_IMAGE_PROPORTIONAL, $bNeedCreatePicture, $arSourceSize, $arDestinationSize); if ($bNeedCreatePicture) { $arParams["SCREEN_SIZE"]["signature"] = \Bitrix\Disk\Security\ParameterSigner::getImageSignature($file["ID"], $arParams["SCREEN_SIZE"]["width"], $arParams["SCREEN_SIZE"]["height"]); $file["BASIC"]["src"] .= "&" . http_build_query($arParams["SCREEN_SIZE"]); $file["BASIC"]["width"] = $arDestinationSize["width"]; $file["BASIC"]["height"] = $arDestinationSize["height"]; } $arResult["FILES"][$id] = $images[$id] = $file; } else { $arResult["FILES"][$id] = $files[$id] = $file; } } if ($this->__page == "show") { $arResult['IMAGES'] = $images; $arResult['FILES'] = $files; } }
/** * Gets url to show file. * @param File $file Target file. * @param array $params Parameters to add in query. * @param bool $absolute Generate absolute url with host url. * @return string */ public function getUrlForShowFile(File $file, array $params = array(), $absolute = false) { if (isset($params['width']) && isset($params['height'])) { $params['signature'] = ParameterSigner::getImageSignature($file->getId(), $params['width'], $params['height']); } return $this->getUrlDownloadController('showFile', array_merge($params, array('fileId' => $file->getId(), 'filename' => $file->getName())), $absolute); }