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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Flask

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

POST

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

Q&A

解決済

1回答

3028閲覧

Flaskで画像が保存出来ません…

ekitabi

総合スコア27

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Flask

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

POST

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

0グッド

0クリップ

投稿2021/11/28 12:23

編集2021/11/28 12:42

PythonのFlaskを用いて、画像表示プログラムに挑戦しています。

内容としましては、
Web上で画像をアップロード→画像をimageフォルダに保存→アップロードした画像を表示
というものです。

そこで、何度やっても画像が表示されません。
原因について、みなさまからヒントをいただけますとありがたいです。

【エラー内容】
ローカルにて、image.jpgをアップロードしてみた結果。画像は保存されていません。

File "C:\Users\○○○\anaconda3\lib\site-packages\werkzeug\datastructures.py", line 3021, in save
dst = open(dst, "wb")
FileNotFoundError: [Errno 2] No such file or directory: './static/image/image.jpg'
127.0.0.1 - - [28/Nov/2021 20:55:28] "POST /upload/ HTTP/1.1" 500 -

【ディレクトリ構成】
app/
---static/-image/
---app.py
---templates/-index.html
-run.py

index.html

index.html

1<!doctype html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title> 6 ファイルをアップロードして判定しよう 7 </title> 8 </head> 9 <body> 10 <h1> 11 ファイルをアップロードして判定しよう 12 </h1> 13 <p>{{message}}</p> 14 <!--Postのときの処理(画像を表示する)--> 15 {% if flag == true %} 16 <div><img src="./static/image/{{image_name}}" alt="{{image_name}}"></div> 17 {% else %} 18 <form action="/upload/" method="post" enctype="multipart/form-data"> 19 <dl> 20 <dt>アップロードする画像を選択してください: 21 <dd><input type="file" id="image" name="image" accept="image/*" required> 22 <dd><input type=submit value=送信> 23 </dl> 24 </form> 25 {% endif %} 26 </body>

app.py

app.py

1# インスタンスの生成 2app = Flask(__name__) 3 4# アップロード先のフォルダを指定 5UPLOAD_FOLDER = './uploads' 6app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 7 8# URL = http://127.0.0.1:5000/ 9@app.route('/') 10def main_page(): 11 flag = False 12 return render_template('index.html', message = '画像を選択しよう', flag = False) 13 14#画像アップロード時の送信ボタンを押すと、ここにつながる 15#POSTの処理 16@app.route('/upload/', methods=['post']) 17def up_post(): 18 # ファイルのリクエストパラメータを取得 19 f = request.files.get('image') 20 # ファイル名を取得 21 filename = secure_filename(f.filename) 22 # ファイルを保存するディレクトリを指定 23 filepath = 'static/image/' 24 # ファイルを保存する 25 f.save(os.path.join(filepath ,filename)) 26 return render_template('index.html', title = 'Form Sample(post)', message = 'アップロードされた画像({})'.format(filename), flag = True, image_name = filename) 27 28 29# 主処理 30if __name__ == "__main__": 31 # 起動 32 app.run(debug=True) 33

【試したこと】
filepath = 'static/image/'+filename
ディレクトリの指定がダメかと思い、書き方を変えたりしましたが、まったく同じエラーになりました。

Python、Flaskにお詳しい方、どうかヒントをいただけますとありがたいです、、。

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

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

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

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

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

guest

回答1

0

ベストアンサー

当方環境ではファイルのアップロード保存までは問題なく動作しました。
そのうえで~/upload/でのページ表示時、リンク先が./~だと/upload/が基準となって意図しない場所を指すので
<img src="./static/image/{{image_name}}"~<img src="/static/image/{{image_name}}"~とルートからの指定で動作しました。

投稿2021/11/29 00:59

can110

総合スコア38341

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

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

ekitabi

2021/11/29 04:17 編集

ご回答いただきましてありがとうございます! can110様の画面では動くのですね。 もう一つのPCでやっても同じくエラー発生という結果になりました、、、。 パスのアドバイスもありがとうございます!勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問