Pull to refresh

Comments 44

> Вариантов дальнейших действий два — или найти новый, пока еще не раскрученный файлообменник и использовать его, пока он не испортится, или организовать собственное решение
Вобще есть еще третий — платить за использование сервиса. Странно, что вы о нем забыли.
Забыл не это, забыл указать, что рассматриваются только бесплатные варианты.
Раз рассматриваются только бесплатные варианты, то нет смысла хранить файл объемом более 1Гб, если есть ограничение на 1 Гб входящего и 1 Гб исходящего трафика в день.
Ну, можно по извращаться. Разбить файл на куски и заливать его частями каждый день. Думаю некоторые месье оценят.
Кроме месье есть еще госпожа автоматизация, а в моем рецепте для нее полная свобода:)
Особенно если кто-то сделает автоматическое распределение загружаемых файлов по разным аккаунтам, тогда…
Посмотрите Google Cloud Storage — 5Gb места (превышение по $0,13) + 25Gb траффика включено. Не надо создавать сложностей с запуском приложения, особенно если учесть что при превышении квоты на GAE Вам придется переходить на платный тариф который начинается от $10/мес.
Если я правильно понимаю, там не бесплатный сервис, а пробный период до 30 июня?
Да, только сейчас заметил. Они ограничили срок бесплатного использования до 30 июня 2012. Но в любом случае 5*0,14=$0,70 в месяц — это одна поездка на автобусе или 15 СМС друзьям ;)
Шикарно. В идеале — можно сделать api + декстопное приложение и сделать такой себе клон дропбокса.
Тоже в процессе чтения вспомнился dropbox… и еще то, что халявные 2 гб на нем уже подходят к концу :)
Статью читал — только вот "* О поддержке авторасшаривания в GNU/Linux не заявлено", потому и не пробовал.
п.с:
Хотя сейчас еще раз посмотрел Бесплатное увеличение Dropbox аккаунта на 5 ГБ и последние комментарии обнадеживают:

Lobey 8 февраля 2012, 11:07
Уже вышла 1.3.14
Fix for random crashes on OS X.
Fix i18n issue in Windows 2000.
Fix issue where you couldn't unlink if you weren't connected.
Fix issue where you couldn't import photos if you had gotten all 5GB.
Fix possible double import when devices disconnect and connect quickly.
Fix failure to import on certain devices on 10.5
Fix for UI not updating in selective sync.
Windows: dl-web.dropbox.com/u/17/Dropbox%201.3.14.exe
Mac OS X: dl-web.dropbox.com/u/17/Dropbox%201.3.14.dmg
Linux x86_64: dl-web.dropbox.com/u/17/dropbox-lnx.x86_64-1.3.14.tar.gz
Linux x86: dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.3.14.tar.gz

спасибо, буду пробовать :)
Amazon S3 в сравнении с GAE как-то поприятнее выглядит, имхо.
Признаюсь, не пробовал, а с GAE год дружу, из плюшек например API для обработки изображений, плюс недавно ввели возможность работать с объектами Blobstore как с обычными файлами. Ну и python люблю страшно:)
У Amazone S3 вроде квоты меньше?
То есть.это все бесплатно и задаром?:) 5Гб-не очень много, правда.
Скорее, тут больше подойдет выполнение простеньких скриптов, чем хостинг.
Учитывая, что основное назначение платформы совершенно отличается от предложенного в статье, 5Гб для файлов и 1Гб для базы данных — нормально, как для бесплатного хостинга.
На одной конференции предлагалось использовать GAE для стартапов — учитывая, что платформа облачная, можно довольно дешево провести стресс-тесты, а бесплатных возможностей вполне достаточно на первое время.
да, только переползти после того, как стартап взлетел, на другую платформу сложновато
А зачем? Учитывая качество сервиса, цены там довольно оправданные и демократичные. Плюс, если использовать, к примеру, пропатченный специально под GAE Django или другой универсальный фреймворк, потом можно перенести данные на другую платформу.
Качество сервиса весьма посредственное (доступность порядка 99%, под нагрузками очень сильно падает, время ответа — порядка 100-200мс, меньше не делается). Переход на собственный Django-сервер (с соответствующими программистами/администраторами) — удовольствие тоже весьма странное.
Amazon EC2 с возможностью масштабировать свои виртуальные машины с LAMP и доступностью по SLA 99,99% выглядит намного более привлекательно во всех смыслах.
У меня такое ощущение, что мы пользуемся разными App Engine. Ни проблем с доступностью бесплатных приложений на HRDS, ни проседаний замечено не было. Запросы по 40-50мс — обычное дело. Конечно, пинг до Штатов великоват, но в веб-приложениях это не критично. Бесплатный GAE предоставляет сервис лучше чем большинство (если не все) отечественных платных хостингов. А встроенные инструменты разработчика позволяют экономить множество времени и сил при разработке и запуске приложения.

SLA Amazon EC2 несколько меньше — 99,95% в год. И это не гарантия того, что сервис будет работать бесперебойно. Если EC2 будет лежать больше 4 часов 23 минут, то можно получить обратно 10% от оплаты. У платных приложений App Engine SLA 99,95% в месяц. То есть 10% можно требовать уже после 22 минут отключки.
Уже можно, но CloudSQL — early preview и только по персональному запросу. В реальности это стоит хороших денег, по сравнению с Datastore, не имеет мета-запросов (либо они отсутствуют сейчас в документации) так что если вы забыли когда-нибудь имя таблицы — узнать о её существовании будет нелегко.
Для джанги в 1.6.2 и 1.6.3 SDK уже включен db.backend для CloudSQL, но тот же South отказывается работать, а у меня руки до патча так и не дошли.
Там 15 гигабайт в месяц всего суммарного трафика.
Вообще то это абсолютно разные вещи. S3 можно сравнивать только с Google Cloud Storage, но у каждого есть свои плюсы и минусы. Под S3 уже много приложений, некоторые позволяют его подключать как диск в Linux. Зато в GCS есть бесплатное место и траффик (в S3 бесплатные квоты только в первый год пользования сервисом).
>Только вы управляете тем, что залито на ваш файлообменник. Его не закроют из-за другого пользователя

Также интересны ограничения на хранимые в GAE данные. Не думаю, что вы хотите лишиться акаунта за нарушающие чьи-нибудь права файлы.
>Также интересны ограничения на хранимые в GAE данные.
ИМХО, никто эти данные проверять не будет, поскольку видеть полный список файлов может только администратор приложения, если конечно он себя как-нибудь не скомпрометирует. Если я правильно понял правила, даже если придет абуза, можно в течении какого-то срока все исправить и тогда приложение не закроют.
Неплохо, но интереснее было бы сделать что-то с WebDAV — удобнее для пользования
Для чего понадобилась модель FileRecord? В BlobInfo информации более, чем достаточно для такого сервиса.
Модель FileRecord понадобилась для возможности обращения к конкретному BlobInfo по числовому id, а не длиннющему ключу. Если есть идеи, как это исправить — предлагайте.
Если принципиально использование id, то без этого, похоже, не обойтись. Однако, я делал приложения для хранения мелких файлов и брал за основу имя файла — возможности BlobInfo использовались более полно и получилась некоторая поддержка версий.

Пример выдачи файла с указанными именем и MD5:
class ServeFile(BlobstoreDownloadHandler): #webapp route: (r'/([a-hA-H0-9]{32})/.*', ServeFile),
  def get(self, md5):
    result = blobstore.BlobInfo.all().filter('md5_hash =', md5).get()
    if not result: return self.error(404)
    self.send_blob(result.key())


Пример выдачи последнего загруженного файла с указанным именем:
class ServeLatest(BlobstoreDownloadHandler): #webapp route: (r'/(.*)', ServeLatest),
  def get(self, filename):
    result = blobstore.BlobInfo.all().filter('filename =', filename).order('-creation').get()
    if not result: return self.error(404)
    self.send_blob(result.key())


Для работы второго примера в index.yaml необходимо прописать
indexes:
- kind: __BlobInfo__
  properties:
  - name: filename
  - name: creation
    direction: desc


В целом, BlobInfo во многом похож на обычный db.Model, и в исходниках есть неплохая документация к нему.

Для разработки под GAE хочу посоветовать PyCharm. Эта IDE поддерживает App Engine из коробки, существенно повышает скорость и удобство и позволяет удобно читать исходники SDK.
>Если принципиально использование id, то без этого, похоже, не обойтись.
Сначала пробовал делать как вы, но в итоге понял, что скидывать другому человеку короткие цифровые ссылки все-таки лучше, чем длинные с закодированными кракозябрами.

>Для разработки под GAE хочу посоветовать PyCharm.
Давно советуют ее, но все никак не доберусь, пока что работаю в Eclipse и Geany.
я бы еще посоветовал buildout recipe.
Зачем вам md5 хеш который по сути требует cputime на расчет, и не сильно короче оригинального BlobKey?

Так же следовало сказать, что GAE SDK самостоятельно обновляет index.yaml соответствующим индексом, при обработке запроса, требующего индексы на свойствах условий.

Плюс — взгляните на ndb — весьма интересная альтернатива голому Datastore
Хеш рассчитывается один раз при загрузке файла, независимо от того, будут им пользоваться или нет. Потом он только берется из хранилища данных. Я его использую потому, что он характеризует файл, в отличие от BlobKey.

Там есть и другие полезные свойства, которые можно использовать:
#  Properties:
#    content_type: Content type of blob.
#    creation: Creation date of blob, when it was uploaded.
#    filename: Filename user selected from their machine.
#    size: Size of uncompressed blob.
#    md5_hash: The md5 hash value of the uploaded blob.
Всё кроме creation (created_at более pythonic) и md5 есть в BlobInfo, который всё равно нужен, чтобы раздать файл.

А md5 — ну разве что для сверки на стороне пользователя.
И creation, и md5 есть в BlobInfo. А в моем комментарии приведена часть документации к нему.
Ага, тупанул что-то. Видимо конец рабочего дня сказывается.
Статья клевая, все в ней ок, но у меня только один вопрос зачем вам code.google.com чтобы выложить туда архив с исходниками?

Мне просто не видится воозможным отрыть его и посмотреть с планшета, при том что в гугло коде есть возможность онлайн посмотреть исходники
и перепубликуйте исходный код на github, пожалуйста — мне было бы интересно на него посмотреть/форкнуть/переписать по своему видению, например (: а google-code не очень социален для разработки.
Кстати — с русскими именами файлов проблем не обнаружено, правда я отдачу файла/чтение из blobstore писал руками, т.к. использую не webapp2 а Flask. Ограничивая размер чанка до 1кб, т.к. память у инстанса не резиновая, вот моя реализация для Flask: gist.github.com/1789623
Only those users with full accounts are able to leave comments. Log in, please.