- PVSM.RU - https://www.pvsm.ru -

Uploadcare — файловое хранилище для сайтов и приложений

image
Привет! Хочу рассказать о проекте, который наверняка окажется полезным многим разработчикам. В двух словах объяснить, зачем он нужен, достаточно сложно, но я попробую. Uploadcare [1] — сервис для приложений и сайтов, упрощающий получение файлов от пользователей, их хранение и передачу по сети.

Тот, кто хоть раз делал форму с <input type="file">, знает, что ничего сложного в этом нет, но есть неприятные моменты, возникающие по пути. Вот только некоторые из них:

— нельзя сохранить форму с файлом по ajax;
— нельзя показать форму с уже выбранным файлом;
— если вы ожидаете картинку, нужно убедиться, что загружена картинка;
— сервер должен быть готов принимать большое тело запроса;
— в некоторых фреймворках загруженный файл является источником повышенной опасности;
— удобная загрузка нескольких файлов реализуется достаточно сложно;
— индикация процесса загрузки реализуется еще сложнее;
— на диске сервера может закончиться место;

Uploadcare призван решить эти проблемы. Принцип работы очень прост: вы встраиваете в форму виджет, с помощью которого пользователи выбирают файлы. Виджет передает вам идентификатор выбранного пользователем файла. В дальнейшем вы работаете только с этим идентификатором: храните его в базе, используете его для построения ссылок к файлам.

image

Это снимает многие перечисленные выше проблемы. Идентификатор можно сохранить по ajax. Можно снова передать его форме, и виджет узнает и покажет пользователю файл. Виджет может еще при выборе файла сказать пользователю, что можно загрузить только картинки. С помощью виджета пользователь может загрузить несколько файлов. На Uploadcare неожиданно не заканчивается место, а его увеличение не связано с такими проблемами, как переразбиение диска и остановка сервера.

Загруженные пользователями файлы привязываются к аккаунту не сразу. Они видны через api, но другого способа обратиться к ним нет. Только после того, как сервер подтвердит с помощью секретного ключа и специального метода api, что файл действительно нужен, он станет публичным. Обычно это происходит после «валидации» формы с остальными данными пользователя. Соответственно, можно не волноваться, что какой-то пользователь или даже злоумышленник сможет закачать то, что вам не нужно. Для вызова методов api можно использовать уже готовые библиотеки [2], которые есть для большинства популярных языков и фреймворков. Впрочем, если приложение не предполагает наличие сервера, есть способ изменить это поведение: можно включить настройку в аккаунте и в виджете, позволяющую сохранять файлы без секретного ключа.

Но принять файл — это полбеды. После этого их нужно еще и раздавать. Для этого нужен широкий канал. Картинки нужно пережимать в другом разрешении, а то и в нескольких. Еще неплохо, чтобы этим занимался отдельный сервер, потому что раздача больших файлов забивает кеши операционной системы.

Именно для этого в Uploadcare есть умный описываете в url [3], какую картинку хотите получить, а CDN её отдает.

Конечно, до Uploadcare были готовые решения, например, для ресайза картинок. Или различные библиотеки, позволяющие сохранять файлы на «безграничном» S3. Но настраивать их все равно достаточно утомительно, и они не решали всех проблем. И мало кто доходил до реализации таких удобств, как загрузка файлов из социальных сетей и облачных сервисов, или до возможности пользователю самому вырезать подходящую часть изображения во время загрузки файла. С Uploadcare вы получаете это автоматически.

image

У проекта есть целых два api (если не считать CDN), которые вы можете использовать напрямую, если у вас специфические требования: api загрузки файлов [4], доступное по публичному ключу, и rest api [5], доступное по секретному. Это позволяет использовать Uploadcare не только в вебе, где загрузка файлов привычное дело, но и на мобильных устройствах и десктопных приложениях. Кстати, для iOS уже есть готовые библиотеки.

Об архитектуре Uploadcare можно написать отдельную статью (кстати, может так и сделать?). Но если вкратце, с надежностью все в порядке. Сервера работают в амазоновском облаке и легко масштабируются горизонтально. За разные функции отвечают разные узлы. Если даже упадет база и главный сайт, CDN продолжит раздавать файлы и ресайзить картинки. За доставку контента отвечает CloudFlare. Файлы пользователей хранятся на S3, и есть возможность подключить собственное хранилище S3 для своего аккаунта, что может оказаться выгодным, если вы предполагаете хранить файлы большого размера.

image

Если проект вас заинтересовал, но что-то не устраивает, не стесняйтесь спрашивать и предлагать в комментариях.

Автор: homm

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/cdn/32542

Ссылки в тексте:

[1] Uploadcare: https://uploadcare.com/

[2] готовые библиотеки: https://uploadcare.com/documentation/

[3] описываете в url: https://uploadcare.com/documentation/cdn/

[4] api загрузки файлов: https://uploadcare.com/documentation/upload/

[5] rest api: https://uploadcare.com/documentation/rest/

[6] Источник: http://habrahabr.ru/post/177013/