Поле выбора
Проверяем accept, multiple, обязательность поля, мобильную камеру и передачу формы как multipart/form-data.
Форма и сервер
Прослеживаем путь файла от выбора в браузере до сохранения на сервере или в облаке. Находим конкретное ограничение и возвращаем пользователю понятный результат загрузки.
Диагностика
Одинаковая надпись «не удалось загрузить» может скрывать проверку формы, отказ прокси, ошибку приложения или недоступное хранилище. Мы фиксируем сетевой запрос и ответ каждого звена.
Проверяем accept, multiple, обязательность поля, мобильную камеру и передачу формы как multipart/form-data.
Сверяем ограничения браузера, прокси, веб-сервера, PHP или приложения. Отдельно проверяем тайм-аут на медленном соединении.
Сопоставляем расширение, MIME-тип и реальное содержимое. Не полагаемся только на имя файла.
Проверяем временный каталог, свободное место, права записи, имя файла и запись связи в базе данных.
Смотрим срок действия ссылки, ключ доступа, CORS, ответ API и завершение многочастной загрузки.
Разделяем загрузку, проверку, успех и ошибку. Пользователь видит допустимый формат и предел до отправки.
Границы обработки
Для воспроизведения используем обезличенный документ с согласованными параметрами. Уточняем, когда посетитель видит отказ: при выборе, во время передачи или после завершения. Фиксируем, какая система принимает файл и кто должен получить доступ к нему после отправки.
Сверяем предел отдельного файла и общий размер запроса. Несколько допустимых документов могут превысить суммарное ограничение. Проверяем число вложений и сообщение для пользователя. Если часть файлов сохранилась до ошибки, определяем, как интерфейс покажет результат и что произойдёт при повторе.
Проверяем сохранение объекта в хранилище и его связь с обращением. Загруженный документ может остаться без записи, если следующий этап завершился сбоем. Согласуем очистку временных объектов и повторную обработку, чтобы не накапливать лишние файлы и не терять вложение клиента.
Повторяем загрузку в новом сеансе и после истечения сессии. Проверяем, что документ получает нужный владелец, а другой пользователь не может открыть его по подменённому идентификатору. Исправление авторизации не должно превращать закрытые вложения в публичную папку.
Проверяем выбор из памяти устройства и медленную передачу. Смотрим состояние кнопки во время отправки и после отказа. Уточняем, нужно ли выбирать файл заново. Автоматический повтор включаем только с понятным правилом обработки дублей и подтверждением завершённого сохранения.
Контроль вложений
При проблеме с обращением проверяем обработку формы. Получение документа пользователем относится к скачиванию файлов.
Проверяем наличие файла, возможность открыть его и связь с нужной заявкой. Сверяем имя, размер и права доступа. Для внешнего приёмщика смотрим результат на его стороне; успешный ответ промежуточного обработчика ещё не подтверждает получение вложения менеджером.
Допустимый документ, запрещённый тип, граничный размер и повторная отправка. При нескольких вложениях добавляем проверку суммарного объёма. Результаты фиксируем вместе с правилами формы, чтобы после смены тарифа или обновления модуля команда могла повторить те же проверки.
Результат
Форма и сервер используют совместимые пределы размера и перечень типов.
Успех показывается после записи файла и связанной записи, а не сразу после выбора.
Сообщение называет исправимую причину без раскрытия пути сервера и других технических данных.
Порядок работ
Нужны URL формы, пример допустимого файла и точный текст ошибки. Конфиденциальный документ не требуется: для теста подойдёт безопасный файл того же типа и размера.
Фиксируем устройство, формат, размер, время ответа и состояние интерфейса.
Проверяем форму, сетевой ответ, журналы приложения и запись в хранилище.
Меняем только подтверждённый лимит, обработчик или права, сохраняя защитные проверки.
Отправляем допустимый файл, файл на пределе, запрещённый тип и повторный запрос.
Документация MDN для поля загрузки файла описывает выбор типов и работу атрибута accept. Сервер всё равно должен проверить файл самостоятельно: браузерное ограничение не заменяет защиту обработчика.
Границы работ
Большие загрузки расходуют память, место и время обработки. Перед изменением лимита оцениваем назначение формы и возможности тарифа. Если файл принимает CRM, облако или сторонний модуль, потребуется тестовый доступ и журнал этого сервиса. Мы не отключаем проверку типа, антивирусную обработку и авторизацию ради прохождения одного примера. Повреждённый исходный файл также нужно заменить: настройка сайта не исправит его содержимое.
Вопросы
У формы, прокси, сервера, приложения и хранилища могут быть разные лимиты. Срабатывает самое строгое ограничение.
Проверяем список разрешённых типов, MIME-тип, реальное содержимое, имя файла и правила защитного модуля.
Такой вариант повышает риск. Разрешаем только нужные типы и храним загрузки так, чтобы сервер не исполнял их как код.
Проверяем допустимые и запрещённые файлы, граничные размеры, мобильную загрузку, сохранение и повторную отправку.
Первый шаг
Укажите тип, примерный размер, устройство и сообщение сайта. Сам файл с личными или рабочими данными присылать не нужно.