新しいファイルをアップロードすると、別の を指定したにもかかわらず、アプリケーション ルート フォルダーに保存されますUPLOAD_FOLDER
。なぜ構成が機能しないのですか?
views.py
:
from flask import render_template
from flask import request, redirect, url_for,flash
from werkzeug.utils import secure_filename
from app import app
import os
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
UPLOAD_FOLD = '/Users/blabla/Desktop/kenetelli/htmlfi'
UPLOAD_FOLDER = os.path.join(APP_ROOT, UPLOAD_FOLD)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def tmrf():
return render_template('main.html')
@app.route('/uploader', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
f.save(secure_filename(f.filename))
return 'file uploaded successfully'
__init__.py
:
from flask import Flask
UPLOAD_FOLDER = ''
ALLOWED_EXTENSIONS = set('*.doc')
app = Flask(__name__)
app.config.from_object('config')
from app import views
ベストアンサー1
UPLOAD_FOLDER
Flask によって認識される構成オプションではありません。f.save
現在の作業ディレクトリ (通常は開発中のプロジェクト ルート) を基準にして動作します。
保護されたファイル名をアップロード フォルダーに結合し、そのパスに保存します。
f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))
ローカルデータをインスタンスフォルダ、プロジェクト ルートではありません。Flask はすでにその場所を知っています。instance
最初にディレクトリを作成するようにしてください。
import os
from werkzeug.utils import secure_filename
# create the folders when setting up your app
os.makedirs(os.path.join(app.instance_path, 'htmlfi'), exist_ok=True)
# when saving the file
f.save(os.path.join(app.instance_path, 'htmlfi', secure_filename(f.filename)))
どこに保存するかに関係なく、アプリケーションを実行しているユーザーがそのディレクトリへの書き込み権限を持っていることを確認する必要があります。たとえば、mod_wsgi で実行しているときに権限エラーが発生する場合、ユーザーは一般にhttpd
または ですwww-data
。権限が拒否されたエラーが発生した場合は、それを確認してください。