Привет.
Раньше не доводилось такого делать, пришлось ядро расковырять...
По всей видимости без кастома компонента не получится. Когда через стандартное поле type=file грузишь, то данные о файле попадают в массив $_FILES где есть tmp_name - полный путь к временному файлу, а при использовании \Bitrix\Main\UI\FileInput в $_REQUEST где тоже есть tmp_name но с обрезанным значением
должно быть
В компоненте вызывается CIBlockElement::Add дальше -
CIBlockElement::Add --> CFile::CheckImageFile --> CFile::GetImageSize($arFile["tmp_name"], true, $flashEnabled)
вот в последней функции и происходит косяк, если tmp_name не полный (полный путь можно получить с помощью CIBlock::makeFileArray)
Пример кастома компонента (тестировал только для PREVIEW_PICTURE):
1. В файле component.php найди проверку
if($arResult["PROPERTY_LIST_FULL"][$propertyID]["PROPERTY_TYPE"] == "F")
замени
$arFile = $_FILES["PROPERTY_FILE_".$propertyID."_0"];
на
$arFile = ($_FILES["PROPERTY_FILE_".$propertyID."_0"] ? $_FILES["PROPERTY_FILE_".$propertyID."_0"] : CIBlock::makeFileArray($_REQUEST["PROPERTY_FILE_".$propertyID."_0"]));
2. В шаблоне template.php замени весь case "F":
for ($i = 0; $i<$inputNum; $i++)
{
$name = 'PROPERTY_FILE_'.$propertyID.'_'.($arResult["ELEMENT_PROPERTIES"][$propertyID][$i]["VALUE_ID"] ? $arResult["ELEMENT_PROPERTIES"][$propertyID][$i]["VALUE_ID"] : $i);
$value = intval($propertyID) > 0 ? $arResult["ELEMENT_PROPERTIES"][$propertyID][$i]["VALUE"] : $arResult["ELEMENT"][$propertyID];
echo \Bitrix\Main\UI\FileInput::createInstance(array(
"name" => $name,
"description" => true,
"upload" => true,
"allowUpload" => "I",
"medialib" => true,
"fileDialog" => true,
"cloud" => true,
"delete" => true,
"maxCount" => 1
))->show(
$value,
$value ? true : false
);
}
P.S. учти тот факт, что тестировалось только для PREVIEW_PICTURE для свойств, для мноржественных точно дописывать надо