Причина такой ошибки, как ни странно, не обязательно связана с превышением трафика. Более того:
К сожалению, мы не предоставляем подробных сведений о трафике по ссылкам. Таким образом, узнать о том, трафик по которой из ссылок привел к блокировке, невозможно. Статистика и показатели, связанные с общими ссылкам, не отслеживаются, поэтому мы не можем предоставить информацию о причинах блокировки ссылок доступа.Для платных аккаунтов все это также остается в силе, только лимиты на трафик увеличиваются в 10 раз. И это за $99 в год.
Было принято волевое решение отказаться от Dropbox (а также остальной проприетарщины) и перепробованы практически все основные бесплатные решения для установки на свой сервер — owncloud, pydio, seafile. Не буду сильно заострять на них внимание, обзоры и сравнения легко можно найти в сети. Скажу только в общих чертах, это одни из самых отвратительных образчиков софта, что я видел — тяжелые, глючные, перегруженные никому не нужным функционалом. В плане умеренности потребления ресурсов и скорости работы порадовал только seafile, но там у разработчиков весьма странные приоритеты и желание побольше монетизировать. При этом у людей пишущих клиент и у людей пишущих веб-интерфейс представления об этом разные. Полный бардак.
Дальнейшие действия напрашивались сами собой — изобретать свой велосипед.
Времени было не особо много, поэтому логично было использовать уже имеющиеся инструменты. С синхронизацией каталогов целиком все было просто и понятно — есть прекрасная связка rsync + Automator. Мониторим папку, при изменении натравливаем на нее rsync, далее распространяем на любое количество своих серверов.
Но этого недостаточно, нужны прямые ссылки и возможность ими быстро делиться.
Для этих целей был написан небольшой скриптик на ~100 строк, который сильно упростил расшарку как скриншотов, так и других файлов.
Как это работает на практике:
Итак, что нам нужно:
— собственный сервер на Linux или OS X с настроенным веб-сервером и доступом по ssh с помощью ключей
— homebrew на клиентской машине для установки скрипта и зависимостей
Открываем терминал и выполняем первоначальную установку:
brew install http://deseven.info/sys/esupload.rb
mkdir ~/.esupload
Если вы принципиально не используете homebrew, то можно вручную скачать скрипт с гитхаба, положить его куда-нибудь и запускать оттуда. Не забудьте поставить также terminal-notifier и pv — скрипт их активно использует.
Следующий шаг — добавление профилей, профили хранятся в ~/.esupload и представляют собой обычные текстовые файлы с перечнем параметров.
Параметры такие:
# обязательные
remote_host=example.org # удаленный сервер
remote_dir=/remotedir # директория на удаленном сервере (куда смотрит ваш HTTP-сервер)
remote_url=http://example.org/share # базовая часть URL для публичных ссылок
# опциональные (указаны дефолтные значения)
remote_user=$USER # ssh логин
remote_ident=$HOME/.ssh/id_rsa # ssh ключ
random_name=no # присвоение случайного имени файлу при заливке
chmod=u=rwx,g=rw,o=r # смена прав на указанные
is_screenshot=no # автоматически менять разрешение для скриншотов
delete_after_upload=no # удалять файл после закачки
track_progress=no # отслеживать процесс заливки
track_interval=30 # интервал отслеживания в секундах
Далее на конкретных задачах.
Скриншоты
Задача — делаем скриншот стандартными средствами (??3 или ??4), получаем в буфер обмена прямую ссылку на него.
Создаем отдельный каталог под скриншоты и переназначаем сохранение в этот каталог:
mkdir ~/Screenshots
defaults write com.apple.screencapture location ~/Screenshots
killall SystemUIServer
Далее создаем профиль с именем screenshot (~/.esupload/screenshot):
remote_dir=/var/www/example.org/screenshots
remote_host=example.org
remote_user=upload
remote_url=http://example.org/screenshots
random_name=yes
is_screenshot=yes
delete_after_upload=yes
Таким образом, при заливке скриншота ему будет присвоено случайное имя, при необходимости (на Retina-дисплеях) он будет уменьшен и удален после заливки.
И наконец открываем Automator, создаем новый Folder Action, указываем наш каталог со скриншотами и добавляем действие «Run shell script», в котором выбираем «Pass input: as arguments» и /usr/local/bin/esupload с профилем screenshot в качестве обработчика.
Можно также добавить дополнительный фильтр с уловиями какие именно файлы будут передаваться скрипту для заливки, но так как мы используем каталог исключительно под скриншоты, то особого смысла в этом нет.
Должно получиться нечто такого вида:
Сохраняем, нажимаем Run для проверки. Все.
Для тестирования самой заливки можно запустить esupload вручную:
esupload screenshot "/path/to/screenshot"
Файлы
Задача — кидаем файл на иконку приложения в доке, получаем в буфер обмена прямую ссылку на него.
Создаем профиль file (~/.esupload/file):
remote_dir=/var/www/example.org/share
remote_host=example.org
remote_user=upload
remote_url=http://example.org/share
track_progress=yes
С использованием параметра track_progress раз в 30 секунд (по умолчанию) будет выводиться прогресс заливки текущего файла. Это полезно для больших файлов, которые могут заливаться достаточно долго.
Снова открываем Automator, в этот раз создаем приложение, в котором в качестве действия делаем все то же самое, что делали и для скриншотов, не забыв только поменять профиль на file:
Сохраняем приложение в /Applications, при желании можно заменить иконку, подменив файл Resources/AutomatorApplet.icns внутри приложения.
Велосипед готов! Плюсы и минусы по-моему достаточно очевидны, но думаю нужно привести их в качестве итога.
Плюсы:
- безопасно (для передачи файлов и авторизации используется ssh)
- просто и гибко (можно заточить под любой сценарий)
- отсутствие зависимости от сторонних сервисов и продуктов
Минусы:
- нет способа контролировать уже залитые файлы и получать на них ссылки
- нет очереди и контроля передачи
- отсутствие контроля доступа и прочих фич
Пожелания и предложения, как по самой методике, так и по скрипту, приветствуются.
Комментарии (34)
aik
06.04.2016 16:37Есть уже готовые инструменты для загрузки скриншотов куда нравится.
Screencloud, например, если простенькое. Ну или если хочется совсем страшного, то sharex — опенсорс, несколько десятков хостингов для аплоада и т.п.
NeoCode
06.04.2016 18:38А эта ошибка 429 — она на чтение (слишком часто обращаются к файлу извне) или на запись (слишком часто обновляют данные в дропбоксе)? Я с таким никогда не сталкивался, поэтому интересно.
deseven
06.04.2016 18:50На чтение. Или из-за авторских прав. Или из-за вирусов. Никто не объясняет почему конкретно.
15432
06.04.2016 23:42У меня было. Обратился в техподдержку, сказали, что заблокировали меня из-за архива с одной софтиной, по чьей-то жалобе на «вирус». Никакого вируса и проблем с авторскими правами у того архива не было. Но им объяснять бесполезно. Удалил, сообщил, разблочили.
EvRiaL
06.04.2016 18:38-7Колхоз какой, и к чему в топике замена дропбокса? В monosnap давно уже есть ftp, sftp, webdav, dropbox и прочие облака. С удобным хранилищем и даже редактором.
nizzkos
06.04.2016 20:54Еще немного не проприетарных реализаций для OS X prism-break.org/ru/subcategories/os-x-file-storage-sync
Goodkat
06.04.2016 22:48+2Дропбокс — это ещё и более-менее удобный доступ с айпада/айфона с возможностью аплоада любых файлов.
Без этого это не замена дропбокса, а шарилка скриншотов на своём сервере.
Есть ли rsync для iOS?
vsapronov
07.04.2016 01:18Здравствуйте, а вы не могли бы подробно написать, чем не устроил ownCloud? Вроде бы он без плагинов один в один — Dropbox по интерфейсу. Синхронизаторы у него есть под все платформы…
Скорость. Мы его в нашем проекте ставим на дохлые ARM-платформы. И он там работает нормально. Т.е. может где-то тормозило у вас? Где?landy
07.04.2016 01:43Аналогичное замечание, не скажу про все указанные.
Но ownCloud использую давно и в первую очередь как раз для отказа отпараноипроприетарщины (и когда dropbox начал просить денег, за то что раньше получал бесплатно). У меня нареканий нет (кроме некоторых моментов, например предпросмотра RAW фото файлов).
И соответственно хотелось бы чтобы «заострили внимание» по поводу «глючности/тормознутости».
deseven
07.04.2016 11:08Здравствуйте. Да, owncloud из всего перепробованного изначально произвел самое приятное впечатление. Веб-интерфейс у него точно лучший.
А вот скорость… Первоначально я заставил их клиент синхронизировать все содержимое моего дропбокса. Сначала он упал, после перезапуска долго думал, сожрав почти гиг памяти, потом начал медленно и неторопливо заливать.
Пишут, что owncloud не очень хорошо работает с большим количеством маленьких файлов, возможно это и есть причина. В дропбоксе у меня было 12000+ файлов.
ivlis
07.04.2016 02:49Syncthing же.
aik
07.04.2016 07:11А как при помощи syncthing можно делать и расшаривать скриншоты?
watashiwaale
07.04.2016 10:42Навскидку — на ум приходит такой вариант:
1. Поднимаем сервер с Syncthing. Защищаем панель паролем (например, закинув её за nginx).
2. Поднимаем HTTP-сервер с корнем в той папке, в которую пишет Syncthing.
3. Расшариваем папку со скриншотами со своего компьютера на сервер.
Вроде должно сработать.aik
07.04.2016 11:534. Пишем демона, который следит за папкой и пихает в буфер обмена последний появившийся там файл.
Костыли же…
Fan67
07.04.2016 10:42О, я тоже долго мучился настройкой своего облака, проблем добавляло то, что на работе мак, дома винда, а в дороге айпад и айфон.
Случайно заметил на кикстартере девайс Lima (сейчас вроде MeetLima называется).
Использую уже около полугода, частенько падает (где-то раз в неделю, обычно когда выходит новое глобальное обновление), но в видна положительная динамика. Жду когда выпустят поддержку raid или хотя бы бэкап на второй hdd, подключённый к Лиме.
На кикстартере позиционировали как общий рабочий стол для всех девайсов, но пока всё в состоянии дропбокса. Кроссплатформенный общий десктоп только в закрытом тестовом режиме.watashiwaale
07.04.2016 11:04$99 — как-то многовато, думается, для железки с двумя портами. Аналог можно на том же Raspberry Pi сделать за считанные часы, например.
Fan67
07.04.2016 13:06На кикстартере они стоили дешевле, 99$ действительно многовато. С другой стороны они сами постоянно обновляются, и если бы их декларируемая конечная цель в виде единого десктопа на всех устройствах была реализована, то оно бы того стоило.
А как сделать поддержку iOS на собственном железе?
Я в своих изысканиях упёрся в проблему нормального доступа с мобильного и планшета.
Ах, да, там в комплекте идут симпатичные наушники и можно выбирать цвет девайса. :)aik
07.04.2016 13:24цель в виде единого десктопа на всех устройствах
Ну, по идее, это делается при помощи запуска терминального сервера.
watashiwaale
13.04.2016 08:32А это уже зависит от того, что именно делать. Для компьютеров вполне хватит дополнительной ноды Syncthing, а вот с телефонов можно подключаться, ну например, по WebDAV.
Единый десктоп — идея неплохая, конечно, но как мне кажется, всё это решается удобным представлением папки, а также придётся немного покодить под каждую ОС отдельно (на винде, например, есть Stardock Fences, который прямо на десктопе работает — нужно что-нибудь подобное). А там хоть через Dropbox они синхронизируются, хоть через своё облако — без разницы.
Feshl
07.04.2016 10:42-1На винде есть бесплатная прога HFS. Работает хорошо можете зайти в на мой комп если он включен 46.242.37.73
Mel
Проще скачать monosnap, чем устраивать весь этот гемор. Но если руки чешутся тут уже ничего не поделаешь :)
deseven
Менять дропбокс на что-то другое проприетарное я лично смысла не вижу, везде может в итоге приключиться западло. Тут по крайней мере ты за косяки сам отвечаешь и можешь их сам же исправлять.
В любом случае я свое мнение никому не навзяываю, ни в коем случае.
Tsyganov_Ivan
Справедливости ради скажу — monosnap умеет заливать скриншоты по ssh)
UPD: Ниже уже говорили это… Я буду читать все комменты перед отправкой своего)