打造你的专属文件上传系统:使用 Flask 实现局域网文件上传支持 PC、Linux 和移动设备

简介

在这篇博客中,我们将介绍如何使用 Flask 创建一个局域网文件上传脚本,该脚本支持 PC、Linux 和移动设备。通过逐步解析代码片段,解释每个部分的功能,最终展示完整代码。希望这篇博客能帮助你理解如何实现文件上传功能。

依赖库

在运行代码之前,请确保已安装以下依赖库:

  • Flask

可以使用以下命令安装这些库:

pip install flask

步骤 1: 导入必要的库

首先,我们需要导入必要的库,包括 Flask 和 os。

from flask import Flask, request, redirect, url_for, render_template
import os

步骤 2: 配置应用

接下来,我们配置 Flask 应用,包括上传文件夹和最大文件大小。

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 最大文件大小设置为 16MB

# 确保上传文件夹存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)

步骤 3: 检查文件扩展名

我们定义了一个函数 allowed_file,用于检查文件扩展名是否允许。

def allowed_file(filename):
    """检查文件扩展名是否允许"""
    allowed_extensions = {'png', 'jpg', 'jpeg', 'gif', 'pdf', 'txt'}
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed_extensions

步骤 4: 创建文件上传视图

我们定义了一个视图函数 upload_file,用于处理文件上传请求。

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        if 'files[]' not in request.files:
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
                file.save(filename)
        return redirect(url_for('upload_file'))
    files = os.listdir(app.config['UPLOAD_FOLDER'])
    return render_template('index.html', files=files)

步骤 5: 启动应用

最后,我们启动 Flask 应用,指定为 0.0.0.0 和 80 端口。

if __name__ == '__main__':
    # 启动 Flask 应用,指定为 0.0.0.0 和 80 端口
    app.run(host='0.0.0.0', port=80, debug=True)

HTML 模板

我们还需要一个 HTML 模板文件 index.html,用于显示上传表单和已上传的文件列表。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .container {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        input[type="file"] {
            margin-bottom: 10px;
        }
        button {
            background-color: #007bff;
            color: #fff;
            border: none;
            padding: 10px 20px;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        ul {
            list-style-type: none;
            padding: 0;
        }
        li {
            margin: 5px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>上传文件</h1>
        <form action="/" method="post" enctype="multipart/form-data">
            <input type="file" name="files[]" accept=".png, .jpg, .jpeg, .gif, .pdf, .txt" multiple required>
            <button type="submit">上传</button>
        </form>
        <h2>已上传文件</h2>
        <ul>
            {% for file in files %}
                <li>{{ file }}</li>
            {% endfor %}
        </ul>
    </div>
</body>
</html>

完整代码

以下是完整代码:

from flask import Flask, request, redirect, url_for, render_template
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 最大文件大小设置为 16MB

# 确保上传文件夹存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)

def allowed_file(filename):
    """检查文件扩展名是否允许"""
    allowed_extensions = {'png', 'jpg', 'jpeg', 'gif', 'pdf', 'txt'}
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed_extensions

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST'):
        if 'files[]' not in request.files:
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
                file.save(filename)
        return redirect(url_for('upload_file'))
    files = os.listdir(app.config['UPLOAD_FOLDER'])
    return render_template('index.html', files=files)

if __name__ == '__main__':
    # 启动 Flask 应用,指定为 0.0.0.0 和 80 端口
    app.run(host='0.0.0.0', port=80, debug=True)

运行结果

启动 Flask 应用后,访问 http://<你的IP地址>,你将看到文件上传界面。你可以选择多个文件进行上传,并在页面上查看已上传的文件列表。

说明

这篇博客详细介绍了如何使用 Flask 创建一个局域网文件上传脚本。通过逐步解析代码片段,解释每个部分的功能,最终展示完整代码。该脚本支持 PC、Linux 和移动设备的文件上传。

  爬虫项目推荐

 其他项目推荐

总结

通过这篇博客,我们学习了以下内容:

  1. 如何导入必要的库并配置 Flask 应用。
  2. 如何检查文件扩展名是否允许。
  3. 如何创建文件上传视图并处理文件上传请求。
  4. 如何启动 Flask 应用并配置 HTML 模板文件。

扩展

  1. 文件类型扩展:可以扩展允许上传的文件类型,例如添加对 .docx.xlsx 等文件的支持。
  2. 文件大小限制:可以根据需求调整最大文件大小限制。
  3. 文件存储路径:可以将上传的文件存储在不同的路径或云存储服务中。
  4. 安全性:可以添加用户认证和权限管理,确保只有授权用户可以上传文件。

相关类型扩展

  1. 多文件上传:可以实现一次上传多个文件的功能,并在页面上显示上传进度。
  2. 文件下载:可以实现文件下载功能,允许用户下载已上传的文件。
  3. 文件管理:可以添加文件删除和重命名功能,方便用户管理已上传的文件。
  4. 文件预览:可以实现文件预览功能,允许用户在上传前预览文件内容。

结论

通过这篇博客,我们学习了如何使用 Flask 创建一个局域网文件上传脚本,该脚本支持 PC、Linux 和移动设备。希望这篇博客对你有所帮助!

欢迎在评论区留言。继续探索和学习,祝你在深度学习的旅程中取得更多的成果!🚀


希望这个博客对你有所帮助!如果你有任何问题需要进一步的指导,请随时提问。继续加油! 🚀

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LIY若依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值