Advertisement
Trigub_Ilia

Битрикс диск, переформатирование и подмена heic файла

Nov 6th, 2018
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.28 KB | None | 0 0
  1. $eventManager = \Bitrix\Main\EventManager::getInstance();
  2. $eventManager->addEventHandler('disk', 'onAfterAddFile', function (\Bitrix\Main\Event $event)
  3. {
  4.     CModule::IncludeModule("disk");
  5.    
  6.     list($file) = $event->getParameters();
  7.    
  8.     //AddMessage2Log($file->getName(), "fileName");
  9.     //AddMessage2Log($file->getID(), "fileID");
  10.     //AddMessage2Log($file->getFile(), "getFile");
  11.    
  12.     $fileID = $file->getID();
  13.     $arrType = $file->getFile();
  14.     $path = CFile::GetPath($arrType["ID"]);
  15.    
  16.  
  17.     if ($file)
  18.     {
  19.    
  20.         $fileInfo = $file->getFile();
  21.         $fileName = $file->getName();
  22.         $fileNameOne = substr($fileName, 0, -5);
  23.         $info = new SplFileInfo($fileName);
  24.         $infoFile = $info->getExtension();
  25.         $storageID = "";
  26.    
  27.         if(($infoFile == "heic") || ($infoFile == "HEIC")){
  28.    
  29.             function curl_get_file_contents($URL)
  30.             {
  31.                 session_start();
  32.                 $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
  33.                 session_write_close();
  34.                
  35.                 $c = curl_init();
  36.                 curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  37.                 curl_setopt($c, CURLOPT_COOKIE, $strCookie);
  38.                 curl_setopt($c, CURLOPT_URL, $URL);
  39.                 $contents = curl_exec($c);
  40.                 curl_close($c);
  41.  
  42.                 if ($contents) return $contents;
  43.                     else return FALSE;
  44.             }
  45.            
  46.             //Скачиваем файл себе в папку
  47.             $local_file_path = "";
  48.             $local_file_name = "";
  49.             if ( Loader::IncludeModule('disk') )
  50.             {
  51.                 $arDiskFiles = Disk\Internals\FileTable::getList(['filter'=>['ID'=>$fileID]]);
  52.  
  53.                 // Работает для версии main старше 17.0
  54.                 foreach( $arDiskFiles as $arFile )
  55.                 {
  56.                     $storageID = $arFile["STORAGE_ID"];
  57.                     $file_two = Disk\BaseObject::buildFromArray($arFile);
  58.                     // Опять же в $file_two будет объект класса Bitrix\Disk\File
  59.  
  60.                     // ссылка на файл на портале
  61.                     $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();
  62.                     //echo $urlManager->getPathFileDetail($file_two).'<br>';
  63.  
  64.                     // публичная ссылка
  65.                     $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();
  66.                     $extLink = $file_two->addExternalLink(
  67.                         array(
  68.                             'CREATED_BY' => 1,
  69.                             'TYPE' => \Bitrix\Disk\Internals\ExternalLinkTable::TYPE_MANUAL,
  70.                         )
  71.                     );
  72.                     $getDataHash = $extLink->getHash();
  73.                     $downloadToken = Random::getString(12);
  74.                     $_SESSION['DISK_PUBLIC_VERIFICATION'][$fileID] = $downloadToken;
  75.                    
  76.                     $extLinkUrl = $urlManager->getShortUrlExternalLink(
  77.                         array(
  78.                             'hash' => $getDataHash,
  79.                             'action' => 'default',
  80.                         ),
  81.                         true
  82.                     );
  83.                    
  84.                     //Ссылка на скачивание файла
  85.                     $input = "https://bitrix24.tui.ru/docs/pub/".$getDataHash."/download/?&token=".$downloadToken;
  86.                    
  87.                     $result = curl_get_file_contents($input);
  88.                     file_put_contents($_SERVER["DOCUMENT_ROOT"]."/upload/mobile_heic/".$fileNameOne.".heic", $result);
  89.  
  90.                    
  91.                     $local_file_path = "https://bitrix24.tui.ru/upload/mobile_heic/".$fileNameOne.".heic";
  92.                     $local_file_name = $fileNameOne.".heic";
  93.                     $htslc = "/upload/mobile_heic/".$fileNameOne.".heic";
  94.                    
  95.                     //Удаляем исходный файл
  96.                     $file->delete($file_two);
  97.                 }
  98.             }
  99.    
  100.             //Конвертируем в jpg
  101.             function convertFile($path_file, $file_name, $start_name){
  102.                 $result_url_download = "";
  103.                 // конвертация
  104.                 $query = "https://api.cloudconvert.com/convert?apikey=".CLOUDCONVERT_KEY."&inputformat=heic&outputformat=jpg&input=download&file=".$path_file."&filename=".$file_name."&wait=true&download=true&save=true";
  105.  
  106.                 if($curl = curl_init()){
  107.                 $headers = array("Content-type: application/x-www-form-urlencoded; charset=utf-8");
  108.                 curl_setopt($curl, CURLOPT_URL, $query);
  109.                 curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
  110.                 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  111.                 $result_curl = curl_exec($curl);
  112.                 curl_close($curl);
  113.                 }
  114.  
  115.                 $tmpExp = explode("https://", $result_curl);
  116.                 $result_url_download = trim("https://".$tmpExp[1]);
  117.  
  118.                 return $result_url_download;
  119.             }
  120.            
  121.             $download_file = convertFile($local_file_path, $local_file_name, $htslc);
  122.            
  123.             // скачиваем файл
  124.             if($ch = curl_init($download_file)){
  125.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  126.                 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
  127.                 curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (http://www.googlebot.com/bot.html)');
  128.                 $output = curl_exec($ch);
  129.  
  130.                 // проверить что нет ошибок
  131.                 if(substr_count($output, "error") == 0){
  132.                     $fh = fopen($_SERVER['DOCUMENT_ROOT']."/upload/mobile_heic/".$fileNameOne.".jpg", 'w');
  133.                     fwrite($fh, $output);
  134.                     fclose($fh);
  135.                 }
  136.             }
  137.  
  138.             //Загружаем новый файл
  139.             $storage = \Bitrix\Disk\Storage::loadById($storageID);
  140.             if ($storage)
  141.             {
  142.                 $folder = $storage->getRootObject();
  143.                 $fileArray = \CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT']."/upload/mobile_heic/".$fileNameOne.".jpg");
  144.                 $file = $folder->uploadFile($fileArray, array(  
  145.                     'CREATED_BY' => 1326
  146.                 ));  
  147.             }
  148.            
  149.             //Удаляем временные файлы
  150.             unlink($_SERVER['DOCUMENT_ROOT']."/upload/mobile_heic/".$fileNameOne.".jpg");
  151.             unlink($_SERVER['DOCUMENT_ROOT']."/upload/mobile_heic/".$fileName);
  152.            
  153.         }
  154.     }
  155. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement