Временный файлообмен
5 мин–1 ч · 10 МБ макс. · совместимо с AI-агентами
Как это работает
Каждый файл уходит в бакет Cloudflare R2 через эндпоинт Pages Functions /api/upload вместе с выбранным сроком жизни. Объект записывается с собственной меткой expiresAt; /f/<id> читает её при каждом скачивании и возвращает 410 Gone, когда срок вышел. Суточное lifecycle-правило R2 физически удаляет объект как страховка.
Сделано для AI-агентов
Многие агенты языковых моделей умеют звать fetch или инструмент браузинга, но не станут сами скачивать вставленный URL — для них это непрозрачная строка. Вариант Agent prompt в каждой строке результата ставит перед ссылкой короткую инструкцию («Скачай и прочитай этот файл») на активном языке — модель видит ясную директиву рядом с URL и тянется к своему инструменту скачивания.
Anti-enumeration
Идентификаторы URL — 16 символов base62 (~95 бит энтропии), так что шанс угадать живую ссылку практически нулевой. Вдобавок каждый 404/410 на /f/* увеличивает счётчик промахов на IP в KV. После 10 промахов IP попадает в бан-лист с TTL 30 дней и лишается доступа и к /f/*, и к /api/upload, пока метка не истечёт.
Что можно загружать?
Любой файл, любой размер до 10 МБ. Тип не ограничен, потому что скачивания всегда отдаются с Content-Disposition: attachment и X-Content-Type-Options: nosniff — браузер сохраняет файл вместо отрисовки, так что загруженный HTML/SVG/JS не выполнится скриптом на этом origin.
Лимиты и скорость
- Бесплатно: 1 файл за раз. Plus: до 20 файлов пакетом.
- 10 МБ на файл (обеспечивает функция загрузки — ограничение на фронтенде лишь вежливость).
- Срок жизни: любое значение от 5 минут до 1 часа.
- Лимит загрузок — аноним: 10/мин, 60/ч, 160/сутки (на IP); вошедший: 10/мин, 50/ч, 200/сутки; Plus: 30/мин, 200/ч, 600/сутки (на аккаунт, неуязвимо к CGNAT).
- Каждое окно лимита (1 мин / 1 ч / 24 ч) привязано к загрузке, которая его открыла — не к полуночи UTC и не к местному поясу. Полный бюджет окна ваш в любом случае, когда бы вы ни начали.
- Когда корзина подходит к потолку бесплатного уровня, загрузки возвращают
503, пока истёкшие файлы не освободят место — восстановление автоматическое.
Конфиденциальность
Считайте каждый URL доступным всем, у кого есть ссылка, а не приватным хранилищем. Идентификатор на практике не угадывается, бан-лист останавливает случайный перебор, но любой, с кем вы поделились ссылкой, может скачивать файл до истечения срока. IP мы хешируем (SHA-256) прежде чем использовать как ключ KV, никогда не сохраняем на объекте R2 и отдаём каждое скачивание с noindex, nofollow.