本文实例讲述了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程序设计有所帮助。