讲师中心 微信公众号
AI工具推荐 视频效率加速

Flask大文件分片上传_接收前端分块Blob并组合追加写入文件

阿瑶酱_6172

阿瑶酱_6172

发布时间:2026-03-20 12:51:01

|

941人浏览过

|

来源于php中文网

原创

Flask接收前端分片Blob需用request.files['file'].read()立即读取字节,避免请求体被消耗;分片应追加写入临时文件并记录已接收索引,合并前校验哈希,完成后原子重命名,并定时清理过期.part文件。

flask大文件分片上传_接收前端分块blob并组合追加写入文件

Flask 怎么接收前端传来的分片 Blob?

前端用 File.prototype.slice() 或 Blob.slice() 切分后,通常以 FormData 发送,每个分片带固定字段(如 file、chunkIndex、totalChunks、fileName)。Flask 侧不能直接用 request.files.get('file') 就完事——它能拿到,但必须立刻读取内容,否则后续请求体被丢弃,导致后续分片读不到。

  • 务必用 request.files['file'].read() 拿到原始字节,别依赖 .save(),它内部会调用 read() 但可能干扰流状态
  • 前端若用 fetch + FormData,确保没手动设置 Content-Type 头,否则 Flask 解析 multipart/form-data 会失败,报 400 Bad Request
  • 分片标识建议统一用整数 chunkIndex(从 0 开始),避免前端传字符串 "0" 导致 Python 比较出错

怎么安全地把分片追加写入同一个临时文件?

不能每个分片都 open(..., 'w') 覆盖写,也不能全加载进内存再拼——大文件(比如 2GB 视频)会 OOM。正确做法是用 open(..., 'ab') 追加,并按 chunkIndex * chunkSize 控制写入位置。但注意:HTTP 请求无序,分片可能乱序到达。

  • 先用 fileName + totalChunks 生成唯一临时文件名(例如 f"{safe_name}_{total_chunks}.part"),避免不同用户同名文件冲突
  • 写入前检查该分片是否已存在(可建个 {chunkIndex: True} 的 Redis 或本地 JSON 记录),防止重复写入损坏文件
  • 不要用 seek() 定位写入——分片大小不严格相等(最后一块更小),seek 容易偏移,老老实实追加 + 外部记录顺序更稳

request.files 读取后为什么下个分片就拿不到数据?

这是 Flask(基于 Werkzeug)的底层行为:请求体只能被消费一次。request.files、request.form、request.get_data() 任意一个触发读取,其余就会返回空。常见错误是先 print request.form 调试,再取 request.files,结果后者为空。

  • 调试时改用 request.get_data(cache=True) 一次性缓存原始 body,再用 ImmutableMultiDict 手动解析 multipart(需引入 werkzeug.formparser),但太重——推荐直接用 request.files 和 request.form,且只用一次
  • 如果必须同时访问 form 和 files,确保顺序是:先取 request.files 并 .read(),再取 request.form;反过来就会失败
  • 用 curl -F 测试时,别加 -H "Content-Type: ...",让 curl 自动设 boundary

合并完成后的文件怎么校验完整性?

前端传的 totalChunks 和 chunkIndex 只能防漏,不能防损坏。真正可靠的是哈希比对:前端上传前算整个文件的 md5 或 sha256,传给后端;合并完再算一次临时文件的哈希。

立即学习“前端免费学习笔记(深入)”;

  • 别在内存里读全文件算哈希——用 hashlib.md5() 分块更新:for chunk in iter(lambda: f.read(8192), b'')
  • 合并动作本身要原子化:先写到 xxx.part,校验通过后再 os.replace() 成正式文件,避免程序崩溃时留下半成品
  • 生产环境务必加超时清理:用定时任务扫 *.part 文件,超过 24 小时未完成的直接删,不然磁盘会被占满

实际最难的不是分片逻辑,是处理网络中断后前端重传、服务重启时分片状态丢失、以及多进程部署下共享临时状态的问题——这些没法靠单个 Flask route 解决,得靠外部存储兜底。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2523

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5463

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6490

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6118

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

863

2024.05.22

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1751

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4544

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1729

2023.07.31

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn