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程序设计有所帮助。