在flask中上传大型csv文件

问题描述 投票:0回答:1

我正在使用 Flask 为一个大(200 MB)的 csv 文件编写一个上传页面。这个简单代码的本地运行仍然不会超出 request.files 行: 运行就会卡在这个关卡,怎么解决?

if request.method == 'POST':
     print("first flag")
     if 'file1' not in request.files:
         return redirect(request.url)
     print("SECOND flag")  
     file1 = request.files['file1']
     print("third flag")  
     file2 = request.files['file2']
     print("forth flag")

控制台只会打印“first flag”,这意味着 if 块被卡住了!!!!

python-3.x flask file-upload localhost large-files
1个回答
-1
投票

您遇到的 Flask 应用程序在上传大文件时卡在 request.files 行的问题可能是由于超出最大上传大小限制而发生的。以下是解决此问题的一些可能的解决方案:

  1. 增加最大上传大小:
  • Flask 本身没有内置的上传大小限制,但像 Gunicorn 或 Werkzeug 这样的 Web 服务器有。检查服务器配置中的最大上传大小设置(通常称为 client_max_body_size)。增加此值以容纳您的 200 MB 文件。
  • 或者,您可以使用 Flask 扩展(例如 Flask-Limiter)为您的特定路由或应用程序设置自定义上传大小限制。
  1. 流式传输上传:
  • 不要立即将整个文件读入内存,而是使用 request.files 的 file.stream 属性来分块处理文件。这可以减少内存使用并防止应用程序卡住。
  • 像 pandas.read_csv(file.stream) 这样的库可以处理分块读取大型 CSV 文件。
  1. 直接上传至云存储:
  • 如果您的应用程序部署在 Google Cloud Platform (GCP) 等云平台上,请考虑使用预签名 URL 将文件直接上传到云存储而不是服务器。这减轻了上传过程的负担并避免了内存限制。
  1. 显示上传进度:
  • 实现进度条或指示器以在文件传输时显示上传进度。这可以提供更好的用户反馈并帮助他们知道上传仍在进行。

调试技巧:

  • 从 request.files 获取上传的文件 (file1.content_length) 后打印其大小,以确认您获得了正确的文件。
  • 检查服务器日志是否有与文件上传或内存使用相关的任何错误。
  • 使用fiddler或Charles Proxy等工具来监控网络流量并观察上传过程。

通过实施这些解决方案之一或组合,您应该能够使用 Flask 应用程序成功上传大型 CSV 文件。请记住根据您使用的特定库和服务器配置调整代码。

© www.soinside.com 2019 - 2024. All rights reserved.