---
title: "Блок «Файл» — вложения и скачивание"
description: "Вложение произвольных файлов с кнопкой скачивания, именем файла и размером, которые хранятся в самом блоке."
source: https://blokeditor.com/ru/docs/file/
lastmod: 2026-09-07
---

Фреймворк JavaScript

Блочные инструменты Файл

# Файл: вложения и скачивание

Карточка вложения для любого загруженного файла. Показывает иконку типа, имя файла, размер в понятном человеку виде, действие скачивания и необязательную подпись. Файлы отправляются через загрузчик, который предоставляет потребитель; если его нет, инструмент откатывается на локальный blob URL (uploadByFile) или на сам вставленный URL (uploadByUrl). Необязательный список разрешённых MIME-типов и максимальный размер ограничивают, что можно принять.

### Импорт

TypeScript

```
import { File } from '@bloklabs/core/tools';
```

### Конфигурация

| Опция | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `uploader` | `FileUploader` | `undefined` | Загрузчик от потребителя с необязательными методами `uploadByFile(file, ctx)` и `uploadByUrl(url, ctx)`, каждый из которых возвращает `{ url, fileName?, size?, mimeType? }`. Колбэк `ctx.onProgress(percent)` сообщает о прогрессе загрузки. Если загрузчик не задан, файлы откатываются на blob URL или на вставленный URL. |
| `endpoints` | `string | { byFile?: string; byUrl?: string }` | `undefined` | Эндпоинт или эндпоинты загрузки — Blok сам отправляет POST-запрос (multipart/form-data для файлов, JSON `{ url }` для встроенных URL) и ожидает в ответе тело `{ url, fileName?, size?, mimeType? }`. Строка используется для обоих случаев; объект задаёт каждый отдельно. Явно указанный `uploader` всегда имеет приоритет. |
| `field` | `string` | `"file"` | Имя поля form-data, в котором передаётся загружаемый файл. |
| `additionalRequestHeaders` | `Record<string, string>` | `undefined` | Дополнительные заголовки, добавляемые к запросам загрузки на эндпоинт. |
| `types` | `string[]` | `undefined` | Необязательный список разрешённых MIME-типов. Если он не задан, принимаются файлы любого типа. |
| `sources` | `'upload' | 'url' | 'both'` | `'both'` | Ограничивает способы добавления файла — только загрузка файла, только URL или оба варианта. |
| `maxSize` | `MaxSizeConfig` | `30 MiB` | Максимальный размер загрузки. Число ограничивает все типы (в байтах); объект задаёт ограничение для каждого MIME-типа, где `'*'` — запасное значение. Передайте Infinity, чтобы снять ограничение. |
| `captionPlaceholder` | `string` | `"Write a caption…"` | Плейсхолдер, который показывается в поле подписи. По умолчанию берётся локализованная строка `tools.file.captionPlaceholder`. |

### Формат данных

TypeScript

```
interface FileData {
  url: string;             // File source URL — http(s) or blob:
  fileName?: string;       // Original filename, when known
  size?: number;           // File size in bytes; rendered human-readable
  mimeType?: string;       // MIME type; used to pick the type icon
  caption?: string;        // Plain-text caption
  captionVisible?: boolean; // Whether the caption row is shown. Opt-in: when omitted it
                            // resolves to true only if `caption` already has text
                            // (unlike Image/Video, which default to true).
}
```

JSON

```
{
  "id": "fil001",
  "type": "file",
  "data": {
    "url": "https://example.com/files/report.pdf",
    "fileName": "report.pdf",
    "size": 184320,
    "mimeType": "application/pdf"
  }
}
```

### Пример использования

TypeScript

```
import { Blok } from '@bloklabs/core';
import { File } from '@bloklabs/core/tools';

const editor = new Blok({
  holder: 'editor',
  tools: {
    file: {
      class: File,
      config: {
        uploader: {
          async uploadByFile(file) {
            const url = await myUpload(file);
            return { url, fileName: file.name, size: file.size, mimeType: file.type };
          },
        },
      },
    },
  },
});
```
