2016-04-19 7 views
-1

現在、私はFlask!にギャラリーシステムを書いています!私は今、画像をアップロードすることができます、私は画像を表示することはできません!私はsend_from_directory関数を使用しようとしましたが、それはちょうど私の応答ストリームのインスタンスを返します!静的ファイルパスをFlaskのURLにどのようにマップするのですか?

class Image(db.Model): 
    __tablename__ = 'images' 
    id = db.Column(db.Integer, primary_key=True) 
    url = db.Column(db.String) 

    timestamp = db.Column(db.DateTime, index=True,default=datetime.utcnow) 
    author_id = db.Column(db.Integer, db.ForeignKey('users.id')) 

    def get_image(self): 
     return send_from_directory(self.url, '') 

そして、私の見解は以下の通りです:

@gallery.route('/', methods=['GET', 'POST']) 
@gallery.route('/index', methods=['GET', 'POST']) 
def index(): 
    page = request.args.get('page', 1, type=int) 
    pagination = Image.query.order_by(Image.timestamp.desc()).paginate(
     page, per_page=current_app.config['LANDPACK_POSTS_PER_PAGE'], 
     error_out=False 
) 
    posts = pagination.items 
    return render_template('gallery/index.html', posts=posts, pagination=pagination) 
@gallery.route('/upload', methods=['GET', 'POST']) 
def upload(): 
    form = ImageForm() 
    if request.method == 'POST': 
     filename = secure_filename(form.image.data.filename) 
     image_url = os.path.join(current_app.config['UPLOAD_FOLDER'], filename) 
     form.image.data.save(image_url) 
     image = Image(url=image_url) 
     db.session.add(image) 
     db.session.commit() 
     flash('You have add a new photo!') 
     send_file = send_from_directory(image_url, filename) 
     print send_file 
     return redirect(url_for('.index')) 
    else: 
     filename = None 

    return render_template('gallery/upload.html', form=form) 

マイ形式:

from flask.ext.wtf import Form 
from flask.ext.wtf import Form 
from wtforms import StringField, PasswordField, BooleanField, SubmitField, IntegerField 
from wtforms.validators import Required, Email, Length, Regexp, EqualTo 
from wtforms import ValidationError 
from flask_wtf.file import FileField 


class ImageForm(Form): 
    name = StringField('Image Name', validators=[Length(1, 64)]) 
    tag = IntegerField('Tag Value', default=50, validators=[Required(), Length(1, 64)]) 
    image = FileField('Your photo') 
    submit = SubmitField('Upload Image') 

マイテンプレートファイルは、そのような単純です:

<img class="img-rounded profile-thumbnail" src="{{ post.get_image() }}"> 

私が持つことができますどのようにurl for src、私はget_image()関数が私にurを返すことを願っていますl(例:http://127.0.0.1/image/sample.jpg) 誰でも手伝いますか?

+0

は、あなたがしようとしました。これに加えて、あなたはまた、ファイルが存在しないかがあるかどうか、以下のコードを使用してインデックス()関数内で確認することができますか?ただのURL? – lapinkoira

答えて

1

これはsend_from_directoryのドキュメントです:

flask.send_from_directory(ディレクトリ、ファイル名、**オプション)

あなたはあなたの例ではfilenamemを送信していないあなただけのself.urlを使用ディレクトリと空のfilenameパラメータとして。 @lapinkoiraによって http://flask.pocoo.org/docs/0.10/api/#flask.send_from_directory

+0

ちょっと、ごめんなさい!私はアップロードビューを置くことを忘れない!今、私は質問を更新しました! send_from_directoryを呼び出すと、self.urlをparamとして置いていますが、このparamも同じディレクトリ+ filenameになっています。だから、私は空の文字列として2番目の引数を入れます!私はいくつかの機能が私にURLを返すことができることを願って例:(http://127.0.0.1/image/sample.jpg)! send_from_directoryはこれを行うことができないようです!なにか提案を? –

+0

ディレクトリとファイル名の間で引数を分割できませんでしたか?私はそれがあなたがそれを使用している方法で動作するかどうかはわかりません... – lapinkoira

2

答えが正しい:

send_from_directory(app.config['UPLOAD_FOLDER'], 
        filename) 

詳しい情報はここで見つけることができます:

あなたはこのようなものを持っている必要があります。最初send_from_directoryの方法を使用せずに

if request.files:  
    filename = request.files['file'] 
    print filename 
関連する問題