2011-09-09 8 views
6

ऐसा लगता है कि फ़ाइल file.save('path',filename') और इसके विपरीत फ़ाइल के बाद file.stream.read() तक नहीं पहुंच सकती है।फ्लास्क/werkzeug में file.stream को रीसेट कैसे करें?

उदाहरण कोड (फ़ाइल अपलोड पैटर्न से व्युत्पन्न):

import os 
from flask import Flask, request, redirect, url_for, send_from_directory 
from werkzeug import secure_filename 

UPLOAD_FOLDER = 'uploads/' 
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) 

app = Flask(__name__) 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
def allowed_file(filename): 
    return '.' in filename and \ 
      filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS 

@app.route('/', methods=['GET', 'POST']) 
def upload_file(): 
    if request.method == 'POST': 
     file = request.files['file'] 
     if file and allowed_file(file.filename): 
      filename = secure_filename(file.filename) 
      print '##########################' 
      print os.path.join(app.config['UPLOAD_FOLDER'],filename) 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
      print file.stream.read() # <- gives no output 
      print '##########################' 
      return redirect(url_for('uploaded_file', 
            filename=filename)) 
    return ''' 
    <!doctype html> 
    <title>Upload new File</title> 
    <h1>Upload new File</h1> 
    <form action="" method=post enctype=multipart/form-data> 
     <p><input type=file name=file> 
     <input type=submit value=Upload> 
    </form> 
    ''' 

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

if __name__ == '__main__': 
    app.run(debug=True)      

उत्तर

6

आप वापस धारा के शुरू करने के seek में सक्षम होना चाहिए। (werkzeug.datastructures.FileStorage पर Werkzeug के दस्तावेज़ देखें)। जब आप दूसरी बार फ़ाइल को पढ़ने का प्रयास करते हैं तो आप फ़ाइल के अंत से पढ़ना शुरू करते हैं।

file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
file.stream.seek(0) # Go back to the start of the file 
print file.stream.read() # <- should work now. 
+0

धन्यवाद! लेकिन यह मेरे लिए काम नहीं कर रहा है। मुझे अभी भी बाश में कोई आउटपुट नहीं मिला है। :( – Framester

+0

आपने अभी मेरे जीवन के 10 घंटे बचाए हैं – JiminyCricket

+0

यह एक अच्छा जवाब है। हालांकि किसी को भी इस जवाब को खोजने के लिए इस मुद्दे के मूल कारण को जानना होगा :) – marcv81