Python使用Flask框架同时上传多个文件的方法
本文实例讲述了Python使用Flask框架同时上传多个文件的方法,分享给大家供大家参考。具体如下:
下面的演示代码带有详细的html页面和python代码
importos
#We'llrenderHTMLtemplatesandaccessdatasentbyPOST
#usingtherequestobjectfromflask.Redirectandurl_for
#willbeusedtoredirecttheuseroncetheuploadisdone
#andsend_from_directorywillhelpustosend/showonthe
#browserthefilethattheuserjustuploaded
fromflaskimportFlask,render_template,request,redirect,url_for,send_from_directory
fromwerkzeugimportsecure_filename
#InitializetheFlaskapplication
app=Flask(__name__)
#Thisisthepathtotheuploaddirectory
app.config['UPLOAD_FOLDER']='uploads/'
#Thesearetheextensionthatweareacceptingtobeuploaded
app.config['ALLOWED_EXTENSIONS']=set(['txt','pdf','png','jpg','jpeg','gif'])
#Foragivenfile,returnwhetherit'sanallowedtypeornot
defallowed_file(filename):
return'.'infilenameand\
filename.rsplit('.',1)[1]inapp.config['ALLOWED_EXTENSIONS']
#ThisroutewillshowaformtoperformanAJAXrequest
#jQueryisloadedtoexecutetherequestandupdatethe
#valueoftheoperation
@app.route('/')
defindex():
returnrender_template('index.html')
#Routethatwillprocessthefileupload
@app.route('/upload',methods=['POST'])
defupload():
#Getthenameoftheuploadedfiles
uploaded_files=request.files.getlist("file[]")
filenames=[]
forfileinuploaded_files:
#Checkifthefileisoneoftheallowedtypes/extensions
iffileandallowed_file(file.filename):
#Makethefilenamesafe,removeunsupportedchars
filename=secure_filename(file.filename)
#Movethefileformthetemporalfoldertotheupload
#folderwesetup
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
#Savethefilenameintoalist,we'lluseitlater
filenames.append(filename)
#Redirecttheusertotheuploaded_fileroute,which
#willbasicalyshowonthebrowsertheuploadedfile
#Loadanhtmlpagewithalinktoeachuploadedfile
returnrender_template('upload.html',filenames=filenames)
#Thisrouteisexpectingaparametercontainingthename
#ofafile.Thenitwilllocatethatfileontheupload
#directoryandshowitonthebrowser,soiftheuseruploads
#animage,thatimageisgoingtobeshowaftertheupload
@app.route('/uploads/<filename>')
defuploaded_file(filename):
returnsend_from_directory(app.config['UPLOAD_FOLDER'],
filename)
if__name__=='__main__':
app.run(
host="0.0.0.0",
port=int("80"),
debug=True
)
index.html代码
<!DOCTYPEhtml> <htmllang="en"> <head> <linkhref="bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <divclass="container"> <divclass="header"> <h3class="text-muted">HowToUploadaFile.</h3> </div> <hr/> <div> <formaction="upload"method="post"enctype="multipart/form-data"> <inputtype="file"multiple=""name="file[]"class="span3"/><br/> <inputtype="submit"value="Upload"class="span2"> </form> </div> </div> </body> </html>
upload.html页面:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<linkhref="bootstrap/3.0.0/css/bootstrap.min.css"
rel="stylesheet">
</head>
<body>
<divclass="container">
<divclass="header">
<h3class="text-muted">Uploadedfiles</h3>
</div>
<hr/>
<div>
Thisisalistofthefilesyoujustuploaded,clickonthemtoload/downloadthem
<ul>
{%forfileinfilenames%}
<li><ahref="{{url_for('uploaded_file',filename=file)}}">{{file}}</a></li>
{%endfor%}
</ul>
</div>
<divclass="header">
<h3class="text-muted">CodetomanageaUpload</h3>
</div>
<hr/>
<pre>
@app.route('/upload',methods=['POST'])
defupload():
#Getthenameoftheuploadedfile
#file=request.files['file']
uploaded_files=request.files.getlist("file[]")
filenames=[]
forfileinuploaded_files:
#Checkifthefileisoneoftheallowedtypes/extensions
iffileandallowed_file(file.filename):
#Makethefilenamesafe,removeunsupportedchars
filename=secure_filename(file.filename)
#Movethefileformthetemporalfoldertotheupload
#folderwesetup
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
filenames.append(filename)
#Redirecttheusertotheuploaded_fileroute,which
#willbasicalyshowonthebrowsertheuploadedfile
#Loadanhtmlpagewithalinktoeachuploadedfile
returnrender_template('upload.html',filenames=filenames)
</pre>
</div>
</div>
</body>
</html>
希望本文所述对大家的Python程序设计有所帮助。