Box APIを使用したセキュアなファイルアップロード・共有ウェブアプリケーション。
BOX-Sharingは、Flask と Box SDK を使用したファイルアップロードシステムです。ユーザーがファイルをアップロードすると、自動的にBox内にランダムに生成されたフォルダが作成され、そこにファイルが保存されます。その後、共有リンクが生成されます。
- Box OAuth2認証: セキュアな認証フロー
- ファイルアップロード: ウェブUIからのドラッグ&ドロップ対応
- 自動フォルダ生成: ランダムに生成されたフォルダ名でファイルを整理
- 共有リンク生成: アップロード後、共有リンクを自動生成
- 一時ファイル管理: アップロード後、サーバー上の一時ファイルを自動削除
- Python 3.8 以上
- Box Developer Account
- リポジトリをクローン
git clone https://github.com/yourusername/BOX-Sharing.git
cd BOX-Sharing- 仮想環境を作成・有効化
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # macOS/Linux- 必要なパッケージをインストール
pip install flask boxsdk requests- 環境設定ファイルを作成
copy env_sample.ini env.inienv.iniファイルを編集して、Box Developer Consoleから取得した認証情報を入力
[box]
client_id = your_client_id
client_secret = your_client_secret
folder_id = your_upload_folder_id- Box Developer Console にアクセス
- 新しいアプリケーションを作成
- OAuth 2.0認証を選択
- リダイレクトURIに
http://localhost:5000/callbackを設定 - Client ID と Client Secret をコピーして
env.iniに入力 - Box内でアップロード先フォルダを作成し、フォルダIDを取得して
env.iniに入力
- アプリケーションを起動
python main.py-
ブラウザで
http://localhost:5000にアクセス -
初回アクセス時は、Box OAuth画面にリダイレクトされます
- Box アカウントでログイン
- アプリケーションに必要な権限を許可
-
ファイルアップロードページで、ファイルを選択してアップロード
-
アップロード完了後、共有リンクが表示されます
BOX-Sharing/
├── main.py # メインアプリケーション
├── env_sample.ini # 環境設定ファイルのサンプル
├── env.ini # 環境設定ファイル(.gitignoreに追加推奨)
├── templates/
│ ├── upload.html # ファイルアップロード画面
│ └── result.html # アップロード完了画面
└── tmp/ # 一時ファイル保存ディレクトリ
└── dummy # プレースホルダー
env.iniファイルには認証情報が含まれているため、絶対にGitにコミットしないでください.gitignoreにenv.iniを追加してください- Client Secret は安全に管理してください
- 本番環境では環境変数を使用することをお勧めします
import os
CLIENT_ID = os.getenv('BOX_CLIENT_ID')
CLIENT_SECRET = os.getenv('BOX_CLIENT_SECRET')
FOLDER_ID = os.getenv('BOX_FOLDER_ID')- ランダムなパスワード文字列を生成
- デフォルトは8文字
- セキュアではない文字(0, O, I, i, l, 1など)を除外
- アクセストークンとリフレッシュトークンを保存
- 保存されたトークンを読み込み
env.iniファイルが存在することを確認してください
- Client ID と Client Secret が正しいことを確認
- リダイレクトURIが
http://localhost:5000/callbackに設定されていることを確認
tmp/ディレクトリが存在することを確認- フォルダIDが正しいことを確認
MIT License
プルリクエストを歓迎します。大きな変更の場合は、まずissueを開いて変更内容を説明してください。
問題が発生した場合は、Issues で報告してください。