上传文件

index.heml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    上传图片
    <form action="/uploads/" method="post" enctype="multipart/form-data">
        <input type="file" name="pic">
        <input type="submit" value="上传"></input>
    </form>
</body>
</html>

run.py

import os
import time
from flask import  Flask,render_template,request
app=Flask(__name__,template_folder='templates')
@app.route('/')
def index():
    return render_template('/index.html')
@app.route('/uploads/',methods=['POST'])
def uploads():
    file = request.files.get('pic')# 获取文件名称
    if not file:    # 如果为空还返回之前页面
        return render_template('index.html')
    file_name = time.strftime('%Y-%m-%d-%H-%M-%S') + file.filename
    file_url = f'/static/{file_name}'
    file.save(os.path.join(
        app.root_path,
        app.static_folder,
        file_name
    ))
    return file_url
if __name__ == '__main__':
    app.run(debug=True)

重新封装run.py文件,增加文件判断

import os
import time
from flask import Flask, render_template, request,send_from_directory
from werkzeug.utils import secure_filename

app = Flask(__name__, template_folder='templates')
# MAX_CONTENT_LENGTH:这个配置设置了请求内容的最大大小(以字节为单位)。
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
# 如果请求的大小超过这个限制,Flask 会返回 413 Payload Too Large 错误

# 定义函数用来 判断文件格式
def allowed_format(filename):
    format_list = ['png', 'jpg', 'jpeg', 'zip']
    format_file = filename.split('.')[-1]
    if format_file in format_list:
        return True
    return False

@app.route('/uploads/', methods=['POST', 'GET'])
def uploads():
    file = request.files.get('pic')  # 获取文件名称
    if not file:  # 如果为空还返回之前页面
        return render_template('index.html')
    if allowed_format(file.filename):   # 调用 allowed_format 判断文件格式
        file_name = time.strftime('%Y-%m-%d-%H-%M-%S') + file.filename
        file_url = f'/static/{file_name}'
        file.save(              # file.save 保存文件
            secure_filename(    # secure_filename  去除文件内的空格
            os.path.join(       # 拼接文件名称
            app.root_path,      # 获取当前目录
            app.static_folder,  # 获取静态文件目录名称
            file_name           # 文件名称
            )))
        return file_url
    return 'error'


# 浏览器访问图片 send_from_directory
@app.route('/uploads/<filename>')
def get_uploads(filename):
    # os.getcwd() = 当前目录
    path = os.getcwd() + '/static/'
    return send_from_directory(path, filename)


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

# 获取并限制文件后缀
# 获取后缀:format_file = filename.split('.')[-1]
# 配置上传文件大小:MAX_CONTENT_LENGTH
# app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
# 保存文件时,去除文件内的空格:secure_filename
# file.save(secure_filename(filename))
# 配置文件可在浏览器访问:send_from_directory
# send_from_directory(path, filename),入参文件路径和文件名称

# 可以参考flask-upload插件
posted @ 2024-12-22 12:19  Old_Arthurㄟ  阅读(27)  评论(0)    收藏  举报