本文实例讲述了Python使用Flask框架同时上传多个文件的方法,分享给大家供大家参考。具体如下:
下面的演示代码带有详细的html页面和python代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import os # We'll render HTML templates and access data sent by POST # using the request object from flask. Redirect and url_for # will be used to redirect the user once the upload is done # and send_from_directory will help us to send/show on the # browser the file that the user just uploaded from flask import Flask, render_template, request, redirect, url_for, send_from_directory from werkzeug import secure_filename # Initialize the Flask application app = Flask(__name__) # This is the path to the upload directory app.config[ 'UPLOAD_FOLDER' ] = 'uploads/' # These are the extension that we are accepting to be uploaded app.config[ 'ALLOWED_EXTENSIONS' ] = set ([ 'txt' , 'pdf' , 'png' , 'jpg' , 'jpeg' , 'gif' ]) # For a given file, return whether it's an allowed type or not def allowed_file(filename): return '.' in filename and \ filename.rsplit( '.' , 1 )[ 1 ] in app.config[ 'ALLOWED_EXTENSIONS' ] # This route will show a form to perform an AJAX request # jQuery is loaded to execute the request and update the # value of the operation @app .route( '/' ) def index(): return render_template( 'index.html' ) # Route that will process the file upload @app .route( '/upload' , methods = [ 'POST' ]) def upload(): # Get the name of the uploaded files uploaded_files = request.files.getlist( "file[]" ) filenames = [] for file in uploaded_files: # Check if the file is one of the allowed types/extensions if file and allowed_file( file .filename): # Make the filename safe, remove unsupported chars filename = secure_filename( file .filename) # Move the file form the temporal folder to the upload # folder we setup file .save(os.path.join(app.config[ 'UPLOAD_FOLDER' ],filename)) # Save the filename into a list, we'll use it later filenames.append(filename) # Redirect the user to the uploaded_file route, which # will basicaly show on the browser the uploaded file # Load an html page with a link to each uploaded file return render_template( 'upload.html' , filenames = filenames) # This route is expecting a parameter containing the name # of a file. Then it will locate that file on the upload # directory and show it on the browser, so if the user uploads # an image, that image is going to be show after the upload @app .route( '/uploads/<filename>' ) def uploaded_file(filename): return send_from_directory(app.config[ 'UPLOAD_FOLDER' ], filename) if __name__ = = '__main__' : app.run( host = "0.0.0.0" , port = int ( "80" ), debug = True ) |
index.html代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!DOCTYPE html> < html lang = "en" > < head > < link href = "bootstrap/3.0.0/css/bootstrap.min.css" rel = "stylesheet" > </ head > < body > < div class = "container" > < div class = "header" > < h3 class = "text-muted" >How To Upload a File.</ h3 > </ div > < hr /> < div > < form action = "upload" method = "post" enctype = "multipart/form-data" > < input type = "file" multiple = "" name = "file[]" class = "span3" />< br /> < input type = "submit" value = "Upload" class = "span2" > </ form > </ div > </ div > </ body > </ html > |
upload.html页面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<!DOCTYPE html> < html lang = "en" > < head > < link href = "bootstrap/3.0.0/css/bootstrap.min.css" rel = "stylesheet" > </ head > < body > < div class = "container" > < div class = "header" > < h3 class = "text-muted" >Uploaded files</ h3 > </ div > < hr /> < div > This is a list of the files you just uploaded, click on them to load/download them < ul > {% for file in filenames %} < li >< a href = "{{url_for('uploaded_file', filename=file)}}" >{{file}}</ a ></ li > {% endfor %} </ ul > </ div > < div class = "header" > < h3 class = "text-muted" >Code to manage a Upload</ h3 > </ div > < hr /> < pre > @app.route('/upload', methods=['POST']) def upload(): # Get the name of the uploaded file #file = request.files['file'] uploaded_files = request.files.getlist("file[]") filenames = [] for file in uploaded_files: # Check if the file is one of the allowed types/extensions if file and allowed_file(file.filename): # Make the filename safe, remove unsupported chars filename = secure_filename(file.filename) # Move the file form the temporal folder to the upload # folder we setup file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) filenames.append(filename) # Redirect the user to the uploaded_file route, which # will basicaly show on the browser the uploaded file # Load an html page with a link to each uploaded file return render_template('upload.html', filenames=filenames) </ pre > </ div > </ div > </ body > </ html > |
希望本文所述对大家的Python程序设计有所帮助。