前提
Flaskのチュートリアルを見ながらアップロードを試してます。
saveはできるのですが、send_from_directory
で読み込むと実行しているpyファイル基準のパスを読みに行きうまく動作しません。
/root ├── flaskr/ │ ├── uploads/ │ └── upload.py ├──uploads/ └──.venv/
実現したいこと
- サブディレクトリから動作して欲しい
発生している問題
セーブ・ロードともに'./uploads'
を指定しているが
/root ├── flaskr/ │ ├── uploads/ ロードの時はここを見に行く │ └── upload.py ├──uploads/ セーブのときはここにセーブされる └──.venv/
該当のソースコード
python
1# Flask公式ファイルのアップロードページより 2# https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/patterns/fileuploads.html 3 4from fileinput import filename 5import os 6from wsgiref.util import request_uri 7from flask import Flask, flash, request, redirect, url_for 8from pydantic import UrlHostTldError 9from requests import head 10from werkzeug.utils import secure_filename 11 12UPLOAD_FOLDER = './uploads' 13ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} 14 15app = Flask(__name__) 16app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 17 18# ファイルのアップロード可否判定 19 20# .があるかどうかのチェックと、拡張子の確認 21# # OKなら1、だめなら0 22def allowed_file(filename): 23 return '.' in filename and \ 24 filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS 25 26# URL 27 28 29@app.route('/', methods=['GET', 'POST']) 30def upload_file(): 31 if request.method == 'POST': 32 if 'file' not in request.files: 33 flash('ファイルがありません') 34 return redirect(request.url) 35 file = request.files['file'] 36 if file.filename == '': 37 flash('ファイルがありません') 38 return redirect(request.url) 39 if file and allowed_file(file.filename): 40 # 危険な文字などを削除(サニタイズ処理) 41 filename = secure_filename(file.filename) 42 file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 43 # アップロード後のページに転送 44 return redirect(url_for('uploaded_file', filename=filename)) 45 return ''' 46 <!doctype html> 47 <html> 48 <head> 49 <meta charset="UTF-8"> <!-- 文字化け防止 --> 50 <title>Upload new File</title> 51 <h1>ファイルをアップロードして判定しよう!</h1> 52 <form method=post enctype=multipart/form-data> 53 <input type=file name=file> 54 <input type=submit value=Upload> 55 </form> 56 </body> 57 </html> 58 ''' 59 60from flask import send_from_directory 61 62@app.route('/uploads/<filename>') 63# ファイル表示 64def uploaded_file(filename): 65 return send_from_directory(app.config['UPLOAD_FOLDER'],filename) 66
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/08/04 06:03