自前でオンラインストレージ

久しぶりのエントリーです。
先日まで非常に便利に使わせてもらっていた「Firestorage」ですが、無料プランでは送信容量に制限がかかってしまいました。
アップロードは早いんですが、ダウンロードは……なので、250MBという容量制限はいいと言えばいいんでしょうけど。でも印刷物の下版ですと、250MBだと少々厳しい時もしばしば。

他に良いオンラインストレージはないものかと探してみましたが、これといってよいサービスがみつかりません。

以前は下版データを、FTP経由でレンタルサーバーにアップロードして、Basic 認証をかけた上でメール送信……という手順を踏んでいましたが、ああいう便利なサービスを覚えてしまうと、ちょっとしたことでも面倒になりますよね。

「ええいこうなったら作ってしまえ」というわけでやってみました。

自前 Firestorage ダウンロードに至るまでの大雑把な流れ

  1. ダウンロードURLが記載されたファイルにアクセスがあったらメール通知(ここは決め撃ち)
  2. 正式なアクセスかどうかは、リファラから判断(リファラの一部がファイル名なのでユニーク値に近いかと)
  3. 念のため、利用者の名前を入れてもらって(お名前入力モードのマネ)、利用規約に同意した人が、ダウンロードページに進めます。
  4. ダウンロードページでは、リファラからファイル名を取り出し、あちこち使い回ししてます。
  5. グローバルIP、ホスト情報は抜き出してます。

なかなか良い感じに仕上がってます。↓こんな感じ。

agree

download
↓こんな風にメール通知も届きますよ。

notify

アップロードはどうするのか

アップロードもphpでごりごりとか思ったんですが、和文(特に Mac OS X の UTF は……)面倒な気がしたので、ここはMac OS Xのいいとこでもある「Automator」+「AppleScript」で行うことにしました。
今使っているFTPクライアントは「Transmit 4」。
以前は Cyberduck というドネーションの FTP クライアントを使っていましたが、twitter で お付き合いのある hoge_systemz さんや salchu さんも超おすすめの FTP クライアントに最近乗り換えました。
どちらも scriptable なのは知っていましたが、Transmit のスクリプト操作は初めて。とりあえずサンプルを漁り、なんとか形になりました。

context

アップロードに至るまでの流れ

  1. 対象ファイルを右クリックで選択
  2. コンテクストメニューから「ファイルアップロードのお知らせ」を選ぶ
  3. Automator のサービスを実行して FTP で対象ディレクトリにアップロード
  4. 完了したら Mail.app で新規メッセージを自動作成
  5. すべてAppleScriptで書いているので、ファイル名もアップロードURLも入った状態です

こちらの操作感もなかなかいいです。
(まぁ自分用なので、エラー処理とかかなり端折ってます)

↓ココまで自動で作らせてるので楽ちんです。

mail_sample

お役を終えたファイルたちはどうするのか

FTPで適当な時期を見て手動削除……と思っていたんですが、ディレクトリ監視とかなんかうまい手段はないかと思って、どっとみちCronで処理するんだから、シェルスクリプトでいろいろググりました。
ありました。ありましたよ、ええ。

  • find [somedir] -type f -mtime +8 -exec rm {} \;

この1行で7日以上前のタイムスタンプのファイルが削除されます。
SSH からこのコマンドで一発削除とかも可能なんですが、やっぱり忘れると思うので cron で実行することに。

しばらくは快適に使えそうです。