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

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

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

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

Python

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

解決済

Flaskでパス指定先がかわってしまう

tarol
sato

総合スコア5

Flask

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

Python

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

1回答

0リアクション

0クリップ

169閲覧

投稿2022/08/04 05:10

前提

Flaskのチュートリアルを見ながらアップロードを試してます。
saveはできるのですが、send_from_directoryで読み込むと実行しているpyファイル基準のパスを読みに行きうまく動作しません。

/root ├── flaskr/ │ ├── uploads/ │ └── upload.py ├──uploads/ └──.venv/

実現したいこと

  • サブディレクトリから動作して欲しい

発生している問題

セーブ・ロードともに'./uploads'を指定しているが

/root ├── flaskr/ │ ├── uploads/ ロードの時はここを見に行く │ └── upload.py ├──uploads/ セーブのときはここにセーブされる └──.venv/

該当のソースコード

python

# Flask公式ファイルのアップロードページより # https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/patterns/fileuploads.html from fileinput import filename import os from wsgiref.util import request_uri from flask import Flask, flash, request, redirect, url_for from pydantic import UrlHostTldError from requests import head from werkzeug.utils import secure_filename UPLOAD_FOLDER = './uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # ファイルのアップロード可否判定 # .があるかどうかのチェックと、拡張子の確認 # # OKなら1、だめなら0 def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS # URL @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': if 'file' not in request.files: flash('ファイルがありません') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('ファイルがありません') return redirect(request.url) if file and allowed_file(file.filename): # 危険な文字などを削除(サニタイズ処理) filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # アップロード後のページに転送 return redirect(url_for('uploaded_file', filename=filename)) return ''' <!doctype html> <html> <head> <meta charset="UTF-8"> <!-- 文字化け防止 --> <title>Upload new File</title> <h1>ファイルをアップロードして判定しよう!</h1> <form method=post enctype=multipart/form-data> <input type=file name=file> <input type=submit value=Upload> </form> </body> </html> ''' from flask import send_from_directory @app.route('/uploads/<filename>') # ファイル表示 def uploaded_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'],filename)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Flask

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

Python

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