20、上传文件

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了20、上传文件脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

定义上传文件的模板页面 upload.htML

<!DOCTYPE html>
<html lang="en">
	<head>
		<;meta charset="UTF-8" />
		<tITle>文件上传</title>
		<style type="text/css">
			.div1 {
				height: 180px;
				width: 380px;
				border: 1px solid #8a8989;
				margin: 0 auto;
			}
			.input {
				display: block;
				width: 250px;
				height: 30px;
				margin: 10px auto;
			}
			.button {
				background: #2066c5;
				color: white;
				font-Size: 18px;
				font-weight: bold;
				height: 30px;
				border-radius: 4px;
			}
		</style>
	</head>
	<body>
		<div class="div1">
			<form action="" method="post" enctype="multipart/form-data">
				<input type="file" name="file" class="input" />

				<input type="submit" value="上传" class="input button" />
			</form>
		</div>
	</body>
</html>

定义表单类文件 form.py

# -*- coding:utf-8 -*-
From wtforms import Form, FileField
from flask_wtf.file import FileRequired, FileAllowed


class UploaDForm(Form):
    file = FileField(validators=[
        FileRequired(),  # FileRequired必须上传
        FileAllowed(['jpg', 'png', 'gif'])  # FileAllowed:必须为指定的格式的文件
    ])

定义主程序

from flask import Flask, render_template, request, send_from_directory
import time
import os
from os import path
from werkzeug.utils import secure_filename
import platform
from form import UploadForm
from werkzeug.datastructures import CombinedMultiDict

app = Flask(__name__)

# 判断不同系统下使用不同的文件分隔符
if platform.System() == "Windows":
    slash = '\'
else:
    platform.system() == "Linux"
    slash = '/'

# 文件存储路径 = 根目录 + 分隔符 + 'uploads' + 分隔符
UPLOAD_PATH = os.path.curdir + slash + 'uploads' + slash


@app.route('/', methods=['POST', 'GET'])
def hello_world():  # 如果收到 GET 请求则跳转到上传文件界面
    if request.method == 'GET':
        return render_template('upload.html')
    else:  # 如果收到 POST 请求则返回响应
        if not os.path.exists(UPLOAD_PATH):  # 没有目录则创建目录
            os.makedirs(UPLOAD_PATH)
        # 将表单和文件一起实例化
        form = UploadForm(CombinedMultiDict([request.form, request.files]))
        if form.validate():
            f = request.files['file']
            filename = secure_filename(f.filename)  # 取得文件名字
            ext = filename.rsplit('.', 1)[1]  # 获取文件后缀
            unix_time = int(time.time())    # 获取上传文件时的时间戳
            new_filename = str(unix_time) + '.' + ext  # 对文件进行重新命名
            file_url = UPLOAD_PATH + new_filename
            PRint(new_filename)  # 输出新文件名
            print(UPLOAD_PATH)  # 输出文件夹路径
            print(file_url)  # 输出文件路径
            f.save(path.join(UPLOAD_PATH, new_filename))  # 保存文件
            return "上传文件成功!!"
        else:
            return "只支持jpg、png以及gif格式的文件!"


# 访问上传的文件
# 浏览器访问:http://127.0.0.1:5000/images/xxx.jpg/  就可以查看文件了
@app.route('/images/<filename>/', methods=['GET', 'POST'])
def get_image(filename):
    dirpath = os.path.join(
        app.root_path, 'uploads')  # 得到文件路径
    print(dirpath)
    print(filename)
    # 也可以为下载方式: return send_from_directory(dirpath,filename,as_attachment=True)
    return send_from_directory(dirpath, filename)  # 为在线浏览方式


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

参考资料

https://weread.QQ.COM/web/reader/0a932660718ac6bc0a9702e

脚本宝典总结

以上是脚本宝典为你收集整理的20、上传文件全部内容,希望文章能够帮你解决20、上传文件所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。