2015-05-14 7 views
6

पर संग्रहीत पथ का उपयोग कर अपलोड की गई फ़ाइल प्राप्त करें मैं फ्लास्क और स्क्लेल्चेमी का उपयोग कर रहा हूं और मुझे फ़ाइल अपलोड करने के बारे में समस्याएं हैं।फ्लास्क और sqlalchemy: डेटाबेस

मैं एक फॉर्म के साथ फ़ाइल अपलोड कर रहा हूं और डीबी को यूआरएल संग्रहीत कर रहा हूं, इसलिए मैं इसे पेज पर अंदर प्रदर्शित कर सकता हूं।

 boxart = request.files['boxart'] 

     if boxart: 
      filename = secure_filename(boxart.filename) 
      boxart_path = os.path.join(app.config['UPLOAD_FOLDER']+"boxart/", filename) 
      boxart.save(boxart_path) 
      game_son.boxart = boxart_path 

     db.session.add(game_son) 
     db.session.commit() 

तो मैं अपने टेम्पलेट के लिए जाने के लिए और मैं game_son.boxart की सामग्री मुद्रित कर सकते हैं और वहाँ फ़ाइल का पूर्ण पथ है:

यहाँ प्रपत्र का कोड है। अगर मैं लिंक पर क्लिक करें, मैं उपयोग कर सकते हैं, लेकिन छवि के अंदर टैग प्रदर्शित नहीं होगा ...

मैं का उपयोग करके टेम्पलेट पर इसे प्राप्त करने की कोशिश की:

<img src="{{ game_son.boxart_url() }}" /> 

मॉडल के अंदर, मैं परिभाषित एक boxart_url विधि, मामले में मैं इसे

class Game_son(db.Model): 
    __searchable__ = ['version_name'] 
    son_id = db.Column(db.Integer, primary_key=True) 
    version_name = db.Column(db.String(128), index=True, unique=False) 
    son_timestamp = db.Column(db.DateTime) 
    dad = db.Column(db.Integer, db.ForeignKey('game_dad.id')) 
    console = db.Column(db.Integer, db.ForeignKey('platform.id')) 
    boxart = db.Column(db.String(256)) 
    thumbnail = db.Column(db.String(256)) 
    genre = db.Column(db.String(32)) 
    subgenre = db.Column(db.String(32)) 

    def boxart_url(self): 
     return self.boxart 

    def __repr__(self): 
     return '<Game %r>: %r' % (self.version_name, self.dad) 

पेज के दृष्टिकोण बस पृष्ठ पर संपूर्ण वस्तु (खेल) भेजने के लिए भेजने से पहले स्ट्रिंग पार्स करने की जरूरत है।

यूआरएल उस पृष्ठ पर आ रहा है है:

/home/removed_my_pc_user/app/media/boxart/image.jpg

संपादित करें: मैं सिर्फ याद आया कि मैं उपयोग कर रहा हूँ एक परियोजना पर आभासी पर्यावरण।

क्या यह chmod से संबंधित है?

अग्रिम धन्यवाद !!

+0

आपका कोड कहां है जो आपके टेम्पलेट में छवि प्रदर्शित करता है? आप डेटाबेस से डेटा वापस कैसे प्राप्त कर रहे हैं? आपने सम्मिलित कथन प्रदान किया है, लेकिन यह आपकी समस्या को हल करने में हमारी सहायता नहीं करता है, जिसमें छवि टैग में दिखाई नहीं दे रहा है। – CodeLikeBeaker

+0

धन्यवाद। मैंने प्रश्न में और जानकारी जोड़ा। अगर कुछ और है, तो बस मुझे बताओ। – Felipe

+0

जब आप स्रोत देखते हैं, तो आपके आईएमजी टैग के लिए स्रोत क्या है? – CodeLikeBeaker

उत्तर

1

अच्छा, यह अजीब है लेकिन मैं अपने स्वयं के प्रश्न का उत्तर दूंगा।

समाधान सरल है, मैंने डेटाबेस के अंदर केवल फाइल नामों को स्टोर करना चुना है।

तो मैं एक दृश्य के लिए एक मार्ग है कि flask.ext.uploads

@app.route('/boxart/<filename>') 
    def uploaded_boxart(filename): 
     return send_from_directory(app.config['UPLOAD_FOLDER'],filename) 

से send_from_directory समारोह का उपयोग कर फ़ाइल वापस आ जाएगी तो, टेम्पलेट के अंदर हम फ़ाइल को लोड करने url_for() समारोह का उपयोग कर सकते बनाया, एक पैरामीटर के रूप भेजने डेटाबेस के अंदर संग्रहीत फ़ाइल नाम।

<img src="{{ url_for('uploaded_boxart', filename = game_son.boxart)}}" /> 

इसके अलावा, मुझे लगता है कि अपनी गलतियों में से एक एप्लिकेशन/ फ़ोल्डर के अंदर मीडिया/ फ़ोल्डर डाल रहा था, और रूट निर्देशिका के अंदर नहीं। इसलिए मैंने app.config में UPLOAD_FOLDER को फिर से कॉन्फ़िगर किया।

संबंधित मुद्दे