关键词

python3 flask实现文件上传功能

下面我将为你详细讲解“Python3 Flask 实现文件上传功能”的完整攻略。

1. 确定上传文件的保存路径

在 Flask 中,我们可以通过设置 app.config 来确定上传文件的保存路径。一般来说,我们建议将上传文件保存在外部的文件夹中,而不要与 Flask 应用程序的代码混淆。

下面是一个设置上传文件保存路径的代码示例:

import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

app = Flask(__name__)

# 设置上传文件保存路径
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

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

@app.route('/upload', 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)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',
                                    filename=filename))
    return '''
    <!doctype html>
    <title>文件上传</title>
    <h1>上传文件</h1>
    <form action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
         <input type=submit value=上传>
    </form>
    '''

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

2. 设计前端页面

在 Flask 中,我们可以使用 HTML/CSS/JavaScript 来设计前端页面,从而实现用户上传文件的功能。下面是一个简单的 HTML 文件示例,它可以帮助你理解如何在 Flask 中实现文件上传功能:

<!doctype html>
<html>
  <head>
    <title>文件上传</title>
  </head>
  <body>
    <h1>上传文件</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="上传">
    </form>
  </body>
</html>

3. 组织路由与视图

在 Flask 应用程序中,路由负责接收用户请求并将其发送到相应的视图函数。视图函数负责处理用户请求并生成 HTTP 响应。为了实现文件上传功能,我们需要在 Flask 应用程序中添加两个视图函数:

  • /upload:这个视图函数负责接收用户上传的文件并将其保存在指定的路径中。
  • /uploads/<filename>:这个视图函数负责从服务器上获取已经上传的文件并返回给用户。

下面是完整的 Flask 应用程序示例:

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

app = Flask(__name__)

# 设置上传文件保存路径
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

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

@app.route('/')
def home():
    return '''
    <!doctype html>
    <title>文件上传</title>
    <h1>上传文件</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="上传">
    </form>
    '''

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('uploaded_file',
                                filename=filename))
    else:
        return '''
        <!doctype html>
        <title>文件上传</title>
        <h1>上传文件</h1>
        <p>不支持该文件类型</p>
        '''

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

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

4. 总结

到这里,我们就完成了一个简单的文件上传功能。在这个例子中,Flask 应用程序负责接收文件、保存文件、并将保存的文件返回给用户。希望这篇攻略能够对你有所帮助,谢谢!

本文链接:http://task.lmcjl.com/news/15524.html

展开阅读全文