Python编写Flask接口如何返回二进制流_处理字节数据输出图像或文件
send_file最稳妥自动处理MIME类型、Content-Length和缓存头路径须为绝对或相对app.root_path内存字节流需用io.BytesIO包装大文件应流式响应返回生成器yield分块bytes。Flask怎么用send_file返回图片或PDF这类二进制文件直接用 send_file 最稳妥它自动处理 MIME 类型、Content-Length 和缓存头比手动构造响应安全得多。别自己拼 Response bytes容易漏掉 Content-Type 或编码声明。常见错误现象UnicodeDecodeError误把字节当字符串、浏览器下载乱码文件、图片显示为黑屏或“无法加载”。路径必须是服务器本地存在的绝对路径或相对于 app.root_path 的相对路径传入内存字节流时得用 io.BytesIO 包一层再传给 send_file如果文件来自数据库 blob 字段或网络请求结果别写成 send_file(/tmp/xxx) —— 临时文件有竞态和清理风险直接走 io.BytesIO(data) download_name 参数mimetype 参数不填也能猜但建议显式指定比如 mimetypeimage/pngPDF 必须设 application/pdf否则 Chrome 可能强行在线预览失败大文件10MB慎用 send_file 默认行为它会一次性读入内存改用 use_x_sendfileTrue需 Nginx 配合或分块流式响应见下一条需要流式传输大文件时为什么不能直接 return BytesIO 对象Flask 的响应体要求是可迭代的字节序列Iterable[bytes]而 BytesIO 本身不是可迭代对象 —— 它得先 .getvalue()吃内存或用 .read() 分块调用才行。使用场景导出百万行 CSV、返回视频片段、代理下游服务的原始响应流。立即学习“Python免费学习笔记深入” WisPaper 复旦大学研发的AI学术搜索工具5分钟内筛选1000篇论文