Uploadcare решает все проблемы по загрузке файлов
Время от времени все программисты сталкиваются с проблемой загрузки файлов на сайт. С одной стороны в форме нет ничего сложного, но есть неприятные моменты, возникающие по пути. большое количество файлов от пользователей.
Uploadcare — сервис для приложений и сайтов, упрощающий получение файлов от пользователей, их хранение и передачу по сети.
Есть сервис решает такие проблемы как:
— сохранение формы с файлом по ajax;
— отображение формы с уже выбранным файлом;
— если вы ожидаете картинку, нужно убедиться, что загружена картинка;
— принятие сервером большого тела запроса;
— опасность загруженного файла в некоторых фреймворках;
— удобная загрузка нескольких файлов реализуется;
— индикация процесса загрузки;
— ограниченное место на диске сервера;
Принцип работы очень прост: вы встраиваете в форму виджет, с помощью которого пользователи выбирают файлы. Виджет передает вам идентификатор выбранного пользователем файла. В дальнейшем вы работаете только с этим идентификатором: храните его в базе, используете его для построения ссылок к файлам.
Идентификатор можно сохранить по ajax. С помощью виджета пользователь может загрузить несколько файлов из разных источников (URL, Google Drive, Dropbox, Facebook, Vkontakte, Instagram, Evernote и т.д). На Uploadcare неожиданно не заканчивается место, а его увеличение не связано с такими проблемами, как переразбиение диска и остановка сервера.
Загруженные пользователями файлы привязываются к аккаунту не сразу. Они видны через api, но другого способа обратиться к ним нет. Только после того, как сервер подтвердит с помощью секретного ключа и специального метода api, что файл действительно нужен, он станет публичным. Обычно это происходит после «валидации» формы с остальными данными пользователя. Соответственно, можно не волноваться, что какой-то пользователь или даже злоумышленник сможет закачать то, что вам не нужно. Для вызова методов api можно использовать уже готовые библиотеки, которые есть для большинства популярных языков и фреймворков. Впрочем, если приложение не предполагает наличие сервера, есть способ изменить это поведение: можно включить настройку в аккаунте и в виджете, позволяющую сохранять файлы без секретного ключа.
Но принять файл — это полбеды. После этого их нужно еще и раздавать. Для этого нужен широкий канал. Картинки нужно пережимать в другом разрешении, а то и в нескольких. Еще неплохо, чтобы этим занимался отдельный сервер, потому что раздача больших файлов забивает кеши операционной системы.
Именно для этого в Uploadcare есть умный CDN. Как любой нормальный CDN, он может просто отдавать файлы по их идентификатору. А может применять к ним разные операции. Для картинок это: изменение размеров, обрезание, приведение к другому формату, поворот и другие. Вы описываете в url, какую картинку хотите получить, а CDN её отдает. Те пользователи, которые не хотят использовать CDN теперь могут копировать загруженный файл с CDN в свой storage (на данный момент только в S3 bucket-ы).
Помимо доступности файла через CDN Uploadcare, пользователи могут файлы у себя, через функцию бэкапа (backup) засторенных файлов в пользовательском S3 бакете (bucket) и Selectel контейнере.
Конечно, до Uploadcare были готовые решения, например, для ресайза картинок. Или различные библиотеки, позволяющие сохранять файлы на «безграничном» S3. Но настраивать их все равно достаточно утомительно, и они не решали всех проблем. И мало кто доходил до реализации таких удобств, как загрузка файлов из социальных сетей и облачных сервисов, или до возможности пользователю самому вырезать подходящую часть изображения во время загрузки файла. С Uploadcare вы получаете это автоматически.
У проекта есть целых два api (если не считать CDN), которые вы можете использовать напрямую, если у вас специфические требования: api загрузки файлов, доступное по публичному ключу, и rest api, доступное по секретному. Это позволяет использовать Uploadcare не только в вебе, где загрузка файлов привычное дело, но и на мобильных устройствах и десктопных приложениях. Кстати, для iOS уже есть готовые библиотеки.
Об архитектуре Uploadcare можно написать отдельную статью. Но если вкратце, сервера работают в амазоновском облаке и легко масштабируются горизонтально. За разные функции отвечают разные узлы. Если даже упадет база и главный сайт, CDN продолжит раздавать файлы и ресайзить картинки. За доставку контента отвечает CloudFlare. Файлы пользователей хранятся на S3, и есть возможность подключить собственное хранилище S3 для своего аккаунта, что может оказаться выгодным, если вы предполагаете хранить файлы большого размера.
Вся документация по сервису есть здесь.
Uploadcare – отлично подойдет всем проектам, которым необходимо получать
Комментировать статьи на сайте возможно только в течении 90 дней со дня публикации.