flask + ngrokを使用して爆速でファイル共有サイトを作る

どうも、皆さん。

昨今ではITが発展し、どんどん扱うデータも大きくなってきました。

そういえば山口県のどこかの町が、給付金4630万円を誤送金したニュースが話題ですね。その役所内では未だにフロッピーディスクが使われていると報道され、思いも寄らない部分が話題になりましたが、もはや近年では最大1.4MBしか記録できないフロッピーディスクは殆ど使い物になりません。

もちろん、ちょっとしたエクセルファイルなら記録できますが、そんなものはメールに添付するなり、オンラインストレージにアップロードして共有リンクを渡せばよいのです。

それよりも、例えば動画ファイルであったりとか、大量の画像ファイルといった大容量なものを共有したい場合にはどうしているでしょうか。

オンラインストレージに収まるならそれも良いと思います。他にも、ファイル便やアップローダを使うのも手の一つですね。

しかし、オンラインストレージは容量に限りがありますし、アップロードに時間が掛かってしまいます。ファイル便やアップローダも同様の問題を抱えていますし、外部のサーバに一時的とは言えデータを保存するのが何となく嫌だなと感じる人もいるでしょう。

そんなわけで、今回はPythonのWebフレームワークであるFlaskとngrokを使用して、爆速でファイル共有を行う方法を紹介します。

この方法のメリットは、

  • ローカルにあるデータを共有するのでアップロードの手間がない

  • 自身のPCをサーバとするのでデータを外部に保存する必要がない

  • 共有し終えたらngrokを停止するだけで良い

  • どれだけ大容量なデータでも共有できる

  • 一時的に割り当てられたURLを共有したいユーザにだけ送るのでセキュア

といった感じです。

手順

1.PythonにFlaskをインストール

$ pip install flask

2.ファイルをダウンロードするコードを書く

# main.py
from flask import Flask, Response,send_file, request

app = Flask(__name__)

@app.route('/')
def download_zip():
    return send_file('hoge.zip', minetype = 'zip')

if __name__ == '__main__':
    app.run(host = '0.0.0.0', port = '5000')

本当はルートにはHTMLを用意してダウンロードボタンなどを実装すると親切ですが、面倒なので今回はアクセスしただけでダウンロードが開始されるようにしました。セキュリティが気になる人はファイル自体を暗号化するなり、Auth認証を設定するなりすれば良いですが、一時的に公開するだけなのでそこまで気にする必要はないと思います。

send_file関数の第一引数には提供したいファイルの名前を指定します。提供するファイルは必ずPythonファイルと同等もしくは下位のディレクトリに置いてください。minetypeは自分で調べてね。

この時、run関数のhost引数を0.0.0.0にしなければ外部に公開できませんので注意してください。portはご自由に設定して構いませんが、ngrokで指定するので忘れてはいけません。

3.Flaskを起動する

$ python main.py

4.ngrokで外部に公開する

導入の方法は公式サイトを参考にしてください。

$ ngrok http 5000

ngrok                                                                                                                                            (Ctrl+C to quit)

Session Status                online
Account                       xxxxxxxx (Plan: Free)
Version                       3.0.2
Region                        Japan (jp)
Latency                       15.250625ms
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://hogehoge.jp.ngrok.io -> http://localhost:5000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              1       1       0.00    0.00    3.59    3.59

HTTP Requests
-------------

GET /                          200 OK
GET /                          200 OK

これでFlaskアプリが外部に公開されました。

試しにForwardingで表示されているURLをブラウザで入力しアクセスすると、ファイルのダウンロードが始まるはずです。

ファイルの共有が終わったら、Ctl + Cでngrokを終了しましょう。また、Flaskも併せて停止します。

以上です。


この記事が気に入ったらサポートをしてみませんか?