- Модуль: imconnector
- Путь к файлу: ~/bitrix/modules/imconnector/lib/library.php
- Класс: BitrixImConnectorLibrary
- Вызов: Library::downloadFile
static function downloadFile(array $file)
{
if (empty($file['url']))
{
$file = false;
}
else
{
$httpClient = new HttpClient(
[
'redirect' => true,
'disableSslVerification' => true
]
);
$httpClient->setHeader('User-Agent', 'Bitrix Connector Client');
if (
!empty($file['headers'])
&& is_array($file['headers'])
)
{
foreach ($file['headers'] as $header)
{
$httpClient->setHeader($header['name'], $header['value']);
}
}
if (self::isEmpty($file['name']))
{
$fileName = self::getNameFile($file['url'], true);
}
else
{
$fileName = $file['name'];
}
$tempFilePath = CFile::GetTempName('', $fileName);
if (
$httpClient->download($file['url'], $tempFilePath)
&& $httpClient->getStatus() == '200'
)
{
if (!empty($file['type']))
{
$type = $file['type'];
}
else
{
$type = $httpClient->getHeaders()->get('Content-Type');
}
if (self::isEmpty($file['name']) )
{
$contentDisposition = $httpClient->getHeaders()->get('Content-Disposition');
if (!empty($contentDisposition))
{
$fileNameContentDisposition = self::getNameFileIsContentDisposition($contentDisposition);
if (
!empty($fileNameContentDisposition)
&& is_string($fileNameContentDisposition)
)
{
$fileName = $fileNameContentDisposition;
}
}
else
{
//Correct handling of links with redirect
$effectiveUrl = $httpClient->getEffectiveUrl();
if ($effectiveUrl !== $file['url'])
{
$fileName = self::getNameFile($effectiveUrl);
}
}
if (MimeType::isImage($type) && !MimeType::isImage(MimeType::getByFilename($fileName)))
{
$normalizeType = MimeType::normalize($type);
foreach (MimeType::getMimeTypeList() as $extension => $checkAgainstMime)
{
if ($normalizeType == $checkAgainstMime)
{
$fileName .= '.'. $extension;
break;
}
}
}
}
if (
empty($type)
|| $type === 'application/octet-stream'
|| $type === 'binary/octet-stream'
)
{
$fileTemp = new File($tempFilePath);
$type = $fileTemp->getContentType();
}
//The definition of the file extension, it is not specified.
if (
mb_strpos($fileName, '.') === false
&& !empty(self::getMimeTypeList()[$type])
)
{
$fileName .= self::getMimeTypeList()[$type];
}
if (empty($type))
{
$type = 'application/octet-stream';
}
if (self::isEmpty($file['description']))
{
$description = '';
}
else
{
$description = $file['description'];
}
$file = [
'name' => $fileName,
'tmp_name' => $tempFilePath,
'type' => $type,
'description' => $description,
'MODULE_ID' => self::MODULE_ID
];
}
else
{
$file = false;
}
}
return $file;
}