#Скачать объект
GET /v1/storage/objects/:key
Возвращает содержимое объекта или временную ссылку для скачивания. Поведение определяется параметрами запроса: по умолчанию — перенаправление, ?inline=true — содержимое в теле ответа.
#Параметры
Путь
| Параметр | Тип | Описание |
|---|---|---|
key |
string | Ключ объекта. Символы / в ключе необходимо кодировать: users%2F42%2Favatar.png |
Запрос
| Параметр | Тип | По умолч. | Описание |
|---|---|---|---|
inline |
boolean | false |
true или 1 — вернуть содержимое непосредственно в теле ответа (HTTP 200) вместо перенаправления |
inline_render |
boolean | false |
Только совместно с ?inline=true. true или 1 — убирает заголовок Content-Disposition, браузер отображает файл вместо скачивания |
download |
string | — | Имя файла. При переходе по ссылке браузер предложит сохранить файл с указанным именем |
#Примеры
#curl — личный ключ
curl -L "https://vibecode.bitrix24.tech/v1/storage/objects/reports%2F2024%2Fannual.pdf" \
-H "X-Api-Key: YOUR_API_KEY" \
--output annual.pdf
#curl — OAuth-приложение
curl -L "https://vibecode.bitrix24.tech/v1/storage/objects/reports%2F2024%2Fannual.pdf" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
--output annual.pdf
#JavaScript — личный ключ
// Получить временную ссылку (без следования по перенаправлению)
const res = await fetch(
'https://vibecode.bitrix24.tech/v1/storage/objects/reports%2F2024%2Fannual.pdf',
{
redirect: 'manual',
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
}
)
const url = res.headers.get('location') // временная ссылка, действует 10 минут
#JavaScript — OAuth-приложение
const res = await fetch(
'https://vibecode.bitrix24.tech/v1/storage/objects/reports%2F2024%2Fannual.pdf',
{
redirect: 'manual',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
const url = res.headers.get('location')
#Ответ
Формат ответа зависит от параметров запроса.
По умолчанию — перенаправление
Возвращает 302 Found с временной ссылкой в заголовке Location. Ссылка действует 10 минут. Браузеры следуют перенаправлению автоматически; в серверном коде используйте redirect: 'manual' и читайте response.headers.get('location').
HTTP/1.1 302 Found
Location: <временная ссылка>
Cache-Control: no-store
?inline=true — содержимое в теле ответа
Возвращает 200 OK с содержимым объекта непосредственно в теле ответа. По умолчанию браузер сохраняет файл (заголовок Content-Disposition: attachment). Чтобы браузер отобразил файл вместо скачивания, добавьте &inline_render=true.
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 204800
ETag: "e3b0c44298fc1c149afbf4c8996fb92"
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="annual.pdf"
<содержимое объекта>
?download=<имя> — скачивание с заданным именем
Возвращает 302 Found. При переходе по ссылке из заголовка Location хранилище отдаёт файл с заголовком Content-Disposition: attachment; filename="<имя>", поэтому браузер предложит сохранить его с указанным именем.
HTTP/1.1 302 Found
Location: <временная ссылка с указанным именем файла>
Cache-Control: no-store
#Пример ответа при ошибке
404 — объект не найден:
{
"success": false,
"error": {
"code": "STORAGE_OBJECT_NOT_FOUND",
"message": "Object reports/2024/annual.pdf not found"
}
}
#Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 401 | MISSING_API_KEY |
API-ключ не передан |
| 403 | STORAGE_SCOPE_REQUIRED |
У API-ключа нет скоупа vibe:storage |
| 404 | STORAGE_OBJECT_NOT_FOUND |
Объект с указанным ключом не найден |
| 410 | STORAGE_OBJECT_DELETED |
Объект был удалён |
| 502 | STORAGE_OBJECT_STREAM_FAILED |
Ошибка при передаче содержимого объекта (только для режима ?inline=true) |
Полный список общих ошибок — Ошибки.