新闻中心

Python 大文件分片上传的处理方法

2025-11-23
浏览次数:
返回列表
大文件分片上传通过切块避免内存溢出,客户端逐片上传并携带元数据,服务端按序合并;核心是生成器读取、分片传输与完整校验,支持断点续传和进度跟踪,确保GB级文件稳定上传。

python 大文件分片上传的处理方法

大文件上传在Web开发中很常见,直接上传可能因内存占用高或网络中断导致失败。Python中实现大文件分片上传,核心思路是将文件切块、逐个上传、服务端合并。以下是具体处理方法。

1. 文件分片读取

避免一次性加载整个文件到内存,使用生成器按固定大小读取文件块。

  • 设定分片大小(如5MB)
  • 通过循环读取文件流,每次返回一部分数据
  • 适合任意大小的文件,内存占用稳定

示例代码:

def read_file_chunks(file_path, chunk_size=5 * 1024 * 1024):
    with open(file_path, 'rb') as f:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            yield chunk

2. 客户端上传分片

每上传一个分片,携带必要信息:文件名、分片序号、总分片数等,便于服务端识别和重组。

  • 使用requests库发送POST请求
  • 每个请求附带当前分片数据及元信息(可放在form-data中)
  • 支持断点续传时,可先查询已上传的分片

上传示例:

SuperCms在线订餐系统 SuperCms在线订餐系统

模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动

SuperCms在线订餐系统 0 查看详情 SuperCms在线订餐系统
import requests
<p>for index, chunk in enumerate(read_file_chunks('large<em>file.zip')):
files = {'file': ('chunk</em>%d' % index, chunk)}
data = {
'filename': 'large_file.zip',
'chunk_index': index,
'total_chunks': 10  # 可预先计算
}
response = requests.post('<a href="https://www.php.cn/link/c0dba5809c620f70942856ad09b144d0">https://www.php.cn/link/c0dba5809c620f70942856ad09b144d0</a>', data=data, files=files)
if response.status_code != 200:
print(f"上传失败: 分片 {index}")
break

3. 服务端接收与合并

服务端需保存每个分片,待全部接收后按顺序合并。

  • 根据文件名创建临时目录存放分片
  • 收到分片后以序号命名存储(如 part_0, part_1)
  • 检查是否所有分片已上传,自动触发合并

Flask 示例处理逻辑:

from flask import Flask, request
import os
<p>app = Flask(<strong>name</strong>)
UPLOAD_DIR = '/tmp/uploads'
CHUNKS_DIR = '/tmp/chunks'</p><p>@app.route('/upload', methods=['POST'])
def handle_upload():
file = request.files['file']
filename = request.form['filename']
chunk_index = int(request.form['chunk_index'])
total_chunks = int(request.form['total_chunks'])</p><pre class="brush:php;toolbar:false;">chunk_dir = os.path.join(CHUNKS_DIR, filename + "_parts")
os.makedirs(chunk_dir, exist_ok=True)

chunk_path = os.path.join(chunk_dir, f"part_{chunk_index}")
file.s*e(chunk_path)

# 检查是否全部上传完成
if all(os.path.exists(os.path.join(chunk_dir, f"part_{i}")) for i in range(total_chunks)):
    merge_files(chunk_dir, os.path.join(UPLOAD_DIR, filename))
    cleanup(chunk_dir)  # 删除分片

return "OK", 200

def merge_files(chunk_dir, target_path): with open(target_path, 'wb') as f: for i in sorted(os.listdir(chunk_dir)): part_path = os.path.join(chunk_dir, i) with open(part_path, 'rb') as part: f.write(part.read())

4. 增强稳定性与用户体验

实际应用中还需考虑错误重试、进度展示、唯一标识等问题。

  • 为每个上传任务生成唯一ID(如UUID),避免文件名冲突
  • 记录上传状态,支持断点续传
  • 添加MD5校验,确保合并后文件完整性
  • 前端可轮询或WebSocket获取上传进度

基本上就这些。关键在于分片读取不占内存、传输信息完整、服务端可靠合并。实现后能稳定上传GB级文件。不复杂但容易忽略细节。

以上就是Python 大文件分片上传的处理方法的详细内容,更多请关注其它相关文章!


# 命令行  # 益阳网站建设推广报价  # 南昌seo博客虾哥网络  # 小吃加盟网站seo案例  # 什么是seo 留痕代发  # 设计网站建设运营费用  # 惠州专业网站建设哪家强  # 深圳seo渠道  # 塘厦加工网站推广  # 国内黄页推广网站有哪些  # 对 营销推广 案例分析  # 源代码  # 如何将  # python  # 转换为  # 断点续传  # 订餐  # 大文件  # 服务端  # 上传  # 分片  # 内存占用  # websocket  # app  # 前端 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  必由学官方登录入口 必由学教师学生账号快速访问  React/Next.js中实现列表项的动态选择与移动  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  Python大型XML文件高效流式解析教程  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  整合Supabase认证与Django模型:跨模式迁移的解决方案  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  4399体育竞技小游戏_4399小游戏赛事入口  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  限制HTML日期输入框的日期选择范围  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  yy漫画网页版官方入口_yy漫画官网登录页面链接  抖音怎么赚钱_抖音创作者变现方法与途径指南  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  在Pyomo中实现基于变量的条件约束:Big-M方法详解  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  ACG动漫视频网入口 ACG动漫*免费正版观看地址  C++ map遍历方法大全_C++ map迭代器使用总结  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  J*a递归快速排序中静态变量导致数据累积问题的解决方案  Discord Slash 命令响应超时问题的异步解决方案  steam官方网页快速访问 steam账号注册全流程  Django通过AJAX异步上传图片并保存至模型的完整指南  AO3访问入口汇总 AO3网页版同人作品一键直达  AO3官方可用镜像 Archive of Our Own网页版最新入口  小米14应用无法联网原因分析_小米14网络权限修复  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  EMS快递官网app_中国邮政速递物流手机客户端  批改网学生版PC登录 批改网官网登录系统入口  J*aScript中高效管理与清空动态列表:避免循环陷阱  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  J*a应用程序首次运行自动创建文件与目录的最佳实践  Win11怎么开启高性能模式_Windows 11电源计划优化设置  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  抖音从哪里进入网页版_抖音官方入口链接  如何在 Excel Online 和 Google 表格中更改日期格式  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网 

搜索