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

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

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

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

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

    image

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

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

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

    Именно для этого в Uploadcare есть умный CDN. Как любой нормальный CDN, он может просто отдавать файлы по их идентификатору. А может применять к ним разные операции. Для картинок это: изменение размеров, обрезание, приведение к другому формату, поворот и другие. Вы описываете в url, какую картинку хотите получить, а CDN её отдает.

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

    image

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

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

    image

    Если проект вас заинтересовал, но что-то не устраивает, не стесняйтесь спрашивать и предлагать в комментариях.
    Поделиться публикацией
    Комментарии 44
      +1
      UPD: Поторопился, простите

      По-моему, ваше хранилище упало.
      image

      И в посте картинок нет.
        0
        Из сообщения «Поторопился, простите» не понятно что же в итоге произошло. Это была какая-то временная проблема? Есть предположения, почему это могло произойти? Нам хотелось бы разобраться.
          +1
          Увидел на главной начало поста с картинкой, открыл в новых вкладках сайт и пост — в посте не картинок, на сайте нет ни картинок ни стилей. Через 2 минуты все вернулось на место. Вот =)
        0
        А объем трафика никак не учитывается? Можно сколько угодно раз показывать картинки, главное чтобы их объем не превысил ограничения в тарифе?
          0
          Мы работаем с Cloudflare, поэтому объем трафика сейчас не учитывается, он может быть любым. Однако, на обычных (не Enterprise) тарифах объем трафика должен быть в пределах Storage*5. Но наши лимиты гибкие, ничего не сломается и мы обязательно свяжемся с проектом, который настолько популярен на обычном тарифе :).

          Ещё, на Enterprise можно подключать свой CDN.
            0
            Я правильно понял? Если у меня 5 Гб картинок залито, на первом тарифном плане, то грубо говоря я могу показать каждую картинку не больше 5ти раз, то есть трафик 25 гигов в месяц?
            Допустим на странице у меня 1 Мб картинок с вашего сервиса. 25000 / 30 = 833 просмотров страницы в день только можно (если не учитывать кеширование)?
            Я если честно не знаю что такое Cloudflare, но ваша услуга мне нравится. Мне кажется я что-то не так понимаю…
              0
              Мы пока над этим думаем, если такого объема трафика будет не хватать — точно его повысим. Пока всем клиентам хватает с запасом :).
              Ведь не каждая картинка будет грузиться 5 раз, а только их часть, значит и отношение не 1 к 5, а 1 к 25, например.

              Cloudflare это один из крутейших в мире CDN провайдеров, посмотрите blog.cloudflare.com/the-ddos-that-almost-broke-the-internet
                0
                Хорошо, спасибо за ответы.
          0
          Круто! Идея хороша!
          А есть ли нечто подобное stand-alone?
          Интеграция с дропбоксом, гугл драйв, инстаграм, ФБ + кроп. Было бы очень круто. Конечно все это можно написать самому, но время-деньги )
            0
            У UC есть бесплатный тариф, а $5 тариф даёт 5гб места. Если у вас растущий проект — мы можем и ещё что-нибудь придумать, обязательно напишите на hello@uploadcare.com
              +2
              Замечательно, спасибо
              тогда такие вопросы еще:
              — как с русским языком?
              — будет ли ВК?
                0
                — В самое ближайшее время мы добавим конструктор виджета, где можно выбрать перевод, русский уже есть. Это будет перевод виджета и пикера, документация пока останется на английском;
                — VK будет, но срок пока не известен, зависит от количества желающих.
                  0
                  1. очень будем ждать, у нас русскоязычная аудитория. А когда примерно будет такая возможность? Пару дней, пару недель или еще позже?
                  2. аналогично, без этого жить можно, но в СНГ ВК пользуются людей по-больше, чем ФБ+Инстаграм+Дропбокс вместе взятые
                    0
                    1. А попробуйте просто 'ru' указать, uploadcare.com/documentation/widget/#custom-localization — уже работает
                    2. Если вы хотите интегрироваться — напишите на igor@uploadcare.com и я попробую ускорить процесс с VK :)
                      0
                      Спасибо большое!
                    0
                    VK очень нужен!
                +2
                Кстати виджет загрузки файлов у них open-source и может грузить в любое место, а не только к ним.
                Если я ничего не путаю.
                • НЛО прилетело и опубликовало эту надпись здесь
                  • НЛО прилетело и опубликовало эту надпись здесь
                  • НЛО прилетело и опубликовало эту надпись здесь
                +1
                В статье не упомянуто текущее ограничение на размер обработки файлов на лету: 1024х634, а этого далеко не всегда достаточно даже для графики на сайте (retina наступает!)

                Еще возникает вопрос как быть с таким сценарием: юзер заливает фото со своей зеркалки на 12-36 мпикс.
                Я не хочу хранить эти дикие мегапикселы и хочу ужать картинку до размера 1280х1024, ну и показывать превью пережималкой на лету.

                Из эффектов очень не хватает наложения водяного знака.
                И кстати, тут возникает момент, что нужно хранить 2 версии большого изображения, одно с водяным знаком для показа в полный размер и одно для создания превью без водяного знака.

                  0
                  Мы аккуратненько прощупываем лимиты и поднимаем их когда об этом просят. Например, мы уже позволяем загружать файлы свыше 1гб, так как одному из клиентов это было нужно.

                  Про водяной знак — спасибо, действительно хорошая идея.

                  Вы не «храните» две версии, вы используете два URL, а мы при этом храним оригинал.
                  В статье на Цукерберг Позвонит есть пример с обработкой изображения (чтобы здесь не дублировать).
                    +1
                    Если водяной знак накладывать на лету, то да, достаточно будет одной версии.

                    Но моя идея в том, чтобы не хранить лишнее. Если я буду хранить оригиналы фотографий пользователя, то очень быстро уйду на энтерпрайз тариф. А если смогу пережимать их внутри хранилища до 1-2 мпикс, то мне хватит и начального тарифа :)
                      +1
                      Мы об этом подумаем, зарегистрируйтесь на бесплатный тариф и мы пришлем рассылку, когда такая возможность появится :).
                  +1
                  filepicker.io  — ваши конкуренты?
                    0
                    даже страница прайсов похожа
                      0
                      Кроме ценников ^_^
                      +3
                      Вы не поверите, это один из самый частых вопросов, который нам задают :)

                      В принципе, да. Многое из функционала у нас похоже: виджет с загрузкой из социальных сетей, ресайз изображений. Но есть принципиальные отличия. Файлпикер именно пикер — он не занимается храненим файлов и их отдачей. В частых вопросах прямо сказано — если вы будете использовать их API как CDN, они попросят вас найти другое решение.

                      Плюс, у файлпикера очень своеобразная политика безопасности: по умолчанию любой обладатель публичного ключа может сделать все что угодно: закачать файлы любого размера или даже удалить файлы. И вам нужно самому настраивать ограничения.
                      0
                      А демо есть?
                      0
                      Хороший сервис. Очень жду подробных технических статей о том, как у вас всё устроено :).
                        0
                        Скоро будет статья об интеграции в Django или о том, как сделать свой ushare.io (файлообменник на базе Uploadcare)
                          0
                          О да! Поделитесь, пожалуйста, как вместо вашего виджета сделать лёгкую форму загрузки (может есть инфа в API, но в ПТ вечером она не находится). Именно этого мне не хватает в вашем сервисе. А вообще — супер, спасибо!
                      +2
                      Бесспорно, это отличный/удобный сервис.
                      Заморочек с загрузкой немало, действительно, да и такое API для картинок, как у CDN Picassa Web, очень приятно пользоваться.

                      S3 тоже отлично, дороговато, зато можно доверять.

                      Большая проблема с таким сервисом только одна — это доверие.
                      Если у проекта действительно есть важный пользовательский контент — то отдавать его «стартапу» это очень неприятно,
                      стартапы имеют неплохую вероятность «невзлететь», вместе со своим неоплаченным Amazon аккаунтом.
                        0
                        Там можно свой S3 подключить и фэйловер настроить на этот случай. Потеряются только плюшки CDN. Напишите им лично, расскажут.
                          0
                          Истинно, nomoretears прав, у нас можно подключить свой S3 и бэкапить данные на него, эта функция станет доступна всем сразу после апдейта дашборда, который уже в разработке. То есть, если вдруг что-то пойдёт не так — можно будет отдавать файлы со своего S3, они никуда не денутся.

                          При этом, есть клиенты, которые с нами уже пол года и за это время у них ни разу не было проблем. И мы точно не собираемся вот так взять и исчезнуть после года разработки: ).
                            0
                            Я не утверждаю вовсе, что вы собираетесь пропасть или ещё что то.
                            То что можно будет сохранять на свой s3 — это тоже большой плюс.

                            Это только вопрос доверия, я уверен, что для быстрых небольших проектов эта проблема будет несущественна, по сравнению с преимуществами.
                            Сомнения только про целевую аудиторию самого большого тарифного плана — 200Gb 100$/месяц, S3+CloudFront (при 100% загрузке будет в 2-3 раза дешевле) и по большому счёту останется только фичи виджета и ресайза картинок. Безумная гибкость с ресайзом картинок нужна очень немногим, для большинства хватит генерации тамбнейлов сразу при загрузке.

                            Я вовсе не против SaaS сервисов, очень даже за.
                            И uploadcare.com просто суперски подойдёт для быстрого старта небольшого/среднего проекта, для которого необходим и удобен такой виджет.
                            В любом случае, впечатление от сервиса очень приятные. Раньше не пользовался подобными, а стоило задуматься.
                          0
                          Очень интересный сервис, спасибо!
                          А есть какие-нибудь инструменты миграции? У нас Drupal и 25Gb фотографий.
                            +2
                            Специальных инструментов пока нет, но мы написали для вас вариант инструкции под Drupal: markable.in/file/4096c1c8-ab46-11e2-81e2-984be164924a/
                            Если будут дополнительные вопросы — напишите мне на igor@uploadcare.com, поможем :)
                            0
                            При попытке посмотреть бесплатные планы для маленьких проектов выдаёт «502 Bad Gateway»
                            uploadcare.com/accounts/create/plan-based/2/
                              0
                              Это вы удачно зашли, обновите страницу :).

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое