You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dash Uploader部署至Elastic Beanstalk后无法上传超1MB文件

问题根因

该问题和dash-uploader组件本身的max_file_size参数配置无关,核心原因是AWS Elastic Beanstalk Python运行环境默认前置的Nginx反向代理自带上传大小限制:Nginx默认配置中client_max_body_size值为1M,所有体积超过1MB的HTTP请求会直接被Nginx层拦截,根本不会转发到后端的Dash应用,因此会出现本地运行无大小限制、部署到EB后仅能上传1MB以下文件的现象。
另外现有代码还存在两个会影响部署后运行的隐患:

  • 注释了application = app.server,Elastic Beanstalk默认通过application变量识别WSGI应用入口
  • du.configure_upload(app, r'')传入空路径作为上传目录,EB环境下系统根目录无写入权限,会触发权限报错
修复方案

按以下步骤调整即可解决问题:

  • 第一步:添加Nginx配置扩展覆盖默认上传限制
    在项目根目录创建.ebextensions隐藏文件夹,在文件夹内新建01_nginx_upload.config配置文件,写入以下内容,将Nginx允许的最大请求体调整为大于组件配置的数值:
files:
  "/etc/nginx/conf.d/upload_limit.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      # 按需调整大小,此处设置为20M,需大于dash-uploader中配置的max_file_size
      client_max_body_size 20M;
  • 第二步:修正应用代码配置
    放开WSGI入口配置,指定具备写入权限的上传目录,修正后的参考代码如下:
import dash_uploader as du
import dash
from dash import html
import os

app = dash.Dash(__name__)
# 暴露WSGI入口,供Elastic Beanstalk识别加载
application = app.server

# 初始化上传目录,确保部署环境下有写入权限
UPLOAD_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "upload_files")
os.makedirs(UPLOAD_PATH, exist_ok=True)
du.configure_upload(app, UPLOAD_PATH)

app.layout = html.Div([
    du.Upload(
        text='Drag and Drop Here',
        text_completed='Successful Upload of ',
        id='upload',
        # 注意:该参数单位为MB,按需调整,需小于Nginx配置的client_max_body_size
        max_file_size=18,
        max_files=1,
        filetypes=['xlsx'],
        upload_id= 'uploader_id'
    ),
])

if __name__ == '__main__':
    # 仅本地调试时执行
    app.run_server(debug=True, port=8080)
  • 第三步:重新部署应用
    将包含.ebextensions文件夹的项目代码重新打包上传到Elastic Beanstalk,等待部署完成后,大于1MB的xlsx文件即可正常上传。

内容的提问来源于stack exchange,提问作者ah2Bwise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:33:16