Заметки
Как получить ссылку на скачивание из поля типа Файл
Как получить ссылку на скачивание из обычного файлового поля: авторизованная ссылка, публичная ссылка, REST и D7.
Ссылка из файлового поля бывает авторизованной и публичной. Если ссылка нужна только сотруднику внутри портала, часто хватает пути к файлу. Если файл должен забрать внешний сервис, лучше использовать REST, публичную ссылку Диска или отдельный backend с проверкой прав.
Задача
В поле типа Файл хранится не сама ссылка, а идентификатор файла или набор данных о нём. Поэтому первое, что нужно понять: файл должен открываться только авторизованному пользователю или нужна публичная ссылка для внешней системы.
Для внутреннего интерфейса обычно достаточно авторизованной ссылки. Для письма, внешнего сервиса или интеграции лучше делать публичную ссылку либо получать файл через REST с авторизацией.
Публичная ссылка
Если файл лежит на Диске, для внешней передачи лучше использовать внешний линк Диска. В REST для этого есть отдельный метод.
BX24.callMethod(
'disk.file.getExternalLink',
{
id: 9043,
},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log(result.data());
}
); Публичная ссылка удобна для письма клиенту или интеграции, но она расширяет доступ к файлу. Поэтому её лучше создавать осознанно и не использовать для внутренних документов без необходимости.
REST и D7
В REST сначала нужно понять тип поля. Обычное поле Файл и поле Файл Диска возвращают разные уровни ID. Для обычного файла думайте в сторону файловой записи, для файла Диска — в сторону объекта Диска и методов disk.*.
BX24.callMethod(
'disk.file.get',
{
id: 9043,
},
function (result) {
console.log(result.data());
}
); Если в результате метода есть downloadUrl, DETAIL_URL или похожее поле, это ещё не значит, что URL публичный. Часто он работает только в контексте авторизованного пользователя.