質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

840閲覧

Python: flask + pyrebase で Firebase Storage にファイルを投稿したい

someiro

総合スコア10

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/23 13:28

編集2022/06/23 14:17

こんにちは。
最近 Flask を始めた者です。
調べてみてもやっていることがマイナーなのか中々情報が出てきませんでしたので質問させていただきます。

やりたいこと

Flask で Firebase の Storage を使って 画像・動画 を保存したいです。
もう少し具体的に書くと
HTMLの ファイル選択 から選択した 画像・動画 を Firebase Storage に投稿したいです。

書いてみたコード:

自分なりに調べてみたり、「こう書けばいいのかな...」と試行錯誤してみました。

Python

1from flask import Flask, render_template, request, redirect 2import pyrebase as pb 3import tempfile 4 5app = Flask(__name__) 6 7config = { 8 "apiKey": "API-KEY", 9 "authDomain": "@@@@.firebaseapp.com", 10 "databaseURL": "https://@@@@.firebaseio.com", 11 "storageBucket": "@@@@.appspot.com" 12} 13 14firebase = pb.initialize_app(config) 15 16@app.route('/', methods=['GET','POST']) 17def index(): 18 if request.method == 'GET': 19 return render_template('index.html') 20 else: 21 picture = request.form['picture'] 22 firebase.storage().put(picture) 23 24 return redirect('/') 25 26if __name__ == "__main__": 27 app.run(debug=True) 28

html

1<div class="container-fluid"> 2 <h4>ファイルを選択</h4> 3 <form action="/" method="POST" enctype="multipart/form-data"> 4 <input class="form-control" type="file" name="picture" id="picture" > 5 <br> 6 <button type="submit" class="btn btn-outline-info">送信</button> 7 </form> 8</div>

質問以外でコードの中で「この書き方良くないよ!」「こうするといいよ!」という点があれば指摘していただきたいです。

よろしくお願いします......!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

someiro

2022/06/23 14:00 編集

Flaskのエラー表示です。 追記失礼致します。 BadRequestKeyError werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand. KeyError: 'picture'
guest

回答1

0

自己解決

あれから海外の方の動画を徹夜であさった結果原因がわかりました。。。!
第一の原因は Firebase 側でした。
Firebase Storage の ルール で認証なしで書き込みができるようにしてやることがポイントです。本番環境ではやらないでね...()

firebase_rule

1rules_version = '2'; 2service firebase.storage { 3 match /b/{bucket}/o { 4 match /{allPaths=**} { 5 allow read, write 6 } 7 } 8}

そして、Python側。

python

1storage = firebase.storage() # 新しく追加 2== 省略 == 3 @app.route('/', methods=['GET','POST']) 4def index(): 5 if request.method == 'GET': 6 return render_template('index.html') 7 else: 8 picture = request.files['picture'] # 修正ポイント1 9 storage.child("images/images.png").put(picture) # 修正ポイント2 10 11 return redirect('/')

こんな感じでした。やはり開発には「自分で調べる力」が大事ですね。学びでした

投稿2022/06/24 16:03

someiro

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問