2017-02-23 1 views
1

새 파일을 업로드하면 다른 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 

답변

0

UPLOAD_FOLDER는 플라스크에서 인식 할 수있는 구성 옵션이 아닙니다. f.save은 현재 작업 디렉토리 (일반적으로 개발 중에 프로젝트 루트)에 상대적으로 작동합니다.

보안 파일 이름을 업로드 폴더에 가입시킨 다음 해당 경로에 저장하십시오.

f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename))) 

은 인스턴스 폴더에없는 프로젝트 루트를 로컬 데이터를 저장하는 것이 좋습니다. 플라스크는 이미 그 위치를 알고 있습니다. 먼저 instance 디렉토리를 만들어야합니다.

import os 
from werkzeug.utils import secure_filename 

f.save(os.path.join(app.instance_path, 'htmlfi', secure_filename(f.filename)))