V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
MrMike
V2EX  ›  JavaScript

WEB 上传文件还有哪些地方限制了文件大小?

  •  
  •   MrMike · 2017 年 7 月 8 日 · 3649 次点击
    这是一个创建于 3131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文件上传的插件用的是 dropzone.js ,服务器的处理语音是 php,服务器环境是 centos 7 + apache2 + php 5.6,php 框架用的是 symfony。 在上传大文件时,经过测试 250M 的 zip 文件是可以上传的,280M 的文件就上传失败,在 request 里面,files 为空。 php.ini 里面的 upload_max_filesize 和 post_max_size 都设置成了 2048M. 在 Dropzone.js 里面的 maxFilesize 也设置成了 4048M。 apache 里面,max_execution_time 和 max_input_time 都设置成了 3600.

    请教下,还有哪些地方限制了 web 端文件上传的大小?

    32 条回复    2017-07-11 09:19:46 +08:00
    loading
        1
    loading  
       2017 年 7 月 8 日 via Android
    系统的临时文件所在分区大小。
    Showfom
        2
    Showfom  
    PRO
       2017 年 7 月 8 日
    楼上正解

    还有浏览器也有限制,早期的浏览器最多只能传 4GB
    zjsxwc
        3
    zjsxwc  
       2017 年 7 月 8 日 via Android
    大文件推荐文件切片断点续传
    MrMike
        4
    MrMike  
    OP
       2017 年 7 月 8 日
    @loading
    @Showfom 感谢指教。
    MrMike
        5
    MrMike  
    OP
       2017 年 7 月 8 日
    @zjsxwc 有相关的插件推荐么。谢谢。
    MrMike
        6
    MrMike  
    OP
       2017 年 7 月 8 日
    @loading

    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 158G 69G 81G 46% /
    devtmpfs 3.9G 0 3.9G 0% /dev
    tmpfs 3.9G 0 3.9G 0% /dev/shm
    tmpfs 3.9G 8.4M 3.9G 1% /run
    tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
    tmpfs 783M 0 783M 0% /run/user/1000

    tmp 空间已经足够吧。。
    MrMike
        7
    MrMike  
    OP
       2017 年 7 月 8 日
    是这个服务器:

    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 40G 16G 22G 43% /
    devtmpfs 1.9G 0 1.9G 0% /dev
    tmpfs 1.9G 0 1.9G 0% /dev/shm
    tmpfs 1.9G 8.3M 1.9G 1% /run
    tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
    tmpfs 380M 0 380M 0% /run/user/1001
    tadtung
        8
    tadtung  
       2017 年 7 月 8 日
    文件上传大小 和你是否用 dropzone.js 没多大关系,,,主要还是 php apache 或者 nginx 的设置。
    LimitRequestBody 有修改?

    具体看你的错误日志。
    正常情况下,,普通的 vps 或者独服 通过 web 上传 2g 以下文件一般都不会出问题的。
    MrMike
        9
    MrMike  
    OP
       2017 年 7 月 8 日
    @tadtung 服务器没有报错的记录的。可能跟楼上的朋友说的一样是临时文件大小,但是查了服务器可用空间,都应该足够了的。
    l9rw
        10
    l9rw  
       2017 年 7 月 8 日
    oott123
        11
    oott123  
       2017 年 7 月 9 日 via Android
    Apache 好像有个叫 LimitRequestBody 的配置
    MrMike
        12
    MrMike  
    OP
       2017 年 7 月 9 日
    @oott123 设置了,还是一样的问题。谢谢。
    zjsxwc
        13
    zjsxwc  
       2017 年 7 月 9 日 via Android
    @MrMike

    github 上很多,比如这个台湾人写的 https://github.com/recca0120/upload
    MrMike
        14
    MrMike  
    OP
       2017 年 7 月 9 日
    @zjsxwc 看来跟用哪个插件上传没关系了。换了上传的插件,问题还是一样的。
    MrMike
        15
    MrMike  
    OP
       2017 年 7 月 9 日
    @tadtung 我将 LimitRequestBody 设置成了 0,还是不行。
    MrMike
        16
    MrMike  
    OP
       2017 年 7 月 9 日
    @loading
    @Showfom 方便看下么,我的服务器空间从数据上看,应该是足够的了。
    Filesystem Size Used Avail Use% Mounted on
    /dev/vda1 40G 16G 22G 43% /
    devtmpfs 1.9G 0 1.9G 0% /dev
    tmpfs 1.9G 0 1.9G 0% /dev/shm
    tmpfs 1.9G 8.3M 1.9G 1% /run
    tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
    tmpfs 380M 0 380M 0% /run/user/1001


    @zjsxwc
    @l9rw 换了插件,还是没解决问题,应该跟使用的上传插件无关了。
    zjsxwc
        17
    zjsxwc  
       2017 年 7 月 9 日
    @MrMike #14 上传普通的小文件也有问题? (震惊脸
    newghost
        18
    newghost  
       2017 年 7 月 9 日
    估计是 tomcat 或 nginx 的上传文件大小限制,改下配置就好了
    MrMike
        19
    MrMike  
    OP
       2017 年 7 月 9 日
    @zjsxwc 对的。用 firebug 看到的数据:
    267.8 mb 的文件:

    +files: FileBag {#12
    #parameters: []
    }

    133.8 mb 的文件:

    +files: FileBag {#12
    #parameters: array:1 [
    "file" => UploadedFile {#13
    -test: false
    -originalName: "Archive 2 copy 2.zip"
    -mimeType: "application/zip"
    -size: 140260369
    -error: 0
    path: "/home/tmp"
    filename: "phppJbk9d"
    basename: "phppJbk9d"
    pathname: "/home/tmp/phppJbk9d"
    extension: ""
    realPath: "/home/tmp/phppJbk9d"
    aTime: 2017-07-09 11:04:05
    mTime: 2017-07-09 11:35:41
    cTime: 2017-07-09 11:35:41
    inode: 1059368
    size: 140260369
    perms: 0100600
    owner: 48
    group: 48
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
    }
    ]
    }
    MrMike
        20
    MrMike  
    OP
       2017 年 7 月 9 日
    @newghost 我在 apache 里面添加了 LimitRequestBody 2097152000
    重新加载 apache 后,问题还是一样的。
    xuminke
        21
    xuminke  
       2017 年 7 月 10 日
    最近也在弄大文件上传,碰到的问题不是文件大小被限制了,而是连接时间过久(因为大文件上传花时间),但是并不会有 timeout 的 error 出来。显先是 java 后端,然后是 nodejs 后端。
    开始认为只要有数据传输,应该不存在超时。但是还是超时了。具体是请求没有结束直接 failed 了。服务端没有任何错误 log。java 层不知道如何设置。改用 nodejs 后: http.createServer(app).setTimeout(1300000),就不会自动断开连接了。
    希望能给到帮助。
    AJian
        22
    AJian  
       2017 年 7 月 10 日
    有用 nginx 的话 client_max_body_size
    MrMike
        23
    MrMike  
    OP
       2017 年 7 月 10 日
    @xuminke 谢谢。我之前一直用 ajax 的方式来上传,将时间修改成了 3600000,还是不行。。刚才直接用表单提交,服务器端居然可以获取到上传的文件数据。我再查一下,是不是 ajax 还有哪些设置没有找到。
    MrMike
        24
    MrMike  
    OP
       2017 年 7 月 10 日
    @AJian 是 apache,服务器上的设置修改了的。刚才直接用表单提交,不使用 ajax 方式,文件可以在服务器端获取到。
    AJian
        25
    AJian  
       2017 年 7 月 10 日
    可以把请求代理到 Fiddler4 或者 Charles 抓取请求包分析对比下。
    googlebot
        26
    googlebot  
       2017 年 7 月 10 日 via Android
    Apache 的 htaccess,
    MrMike
        27
    MrMike  
    OP
       2017 年 7 月 10 日
    @googlebot 能设置的都设置了的。纯表单提交,服务器可以获取提交的数据。用 ajax 就不行。
    Showfom
        28
    Showfom  
    PRO
       2017 年 7 月 10 日
    楼主有没有尝试运维的终极大法?

    reboot
    MrMike
        29
    MrMike  
    OP
       2017 年 7 月 11 日
    @Showfom 哈哈,reboot 几次了,就差 reinstall 了。。
    googlebot
        30
    googlebot  
       2017 年 7 月 11 日
    @MrMike 贴个 htaccess
    <Ifmodule mod_php5.c>
    php_value upload_max_filesize 2M
    php_value max_execution_time 30
    php_value max_input_time 60
    php_value memory_limit 32M
    php_value post_max_size 8M
    php_flag register_globals off
    php_flag display_errors off
    php_flag file_uploads on
    php_flag log_errors off
    php_flag output_buffering off
    php_flag register_argc_argv on
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    php_flag magic_quotes_sybase off
    php_flag mysql.allow_persistent off
    php_flag register_long_arrays on
    php_flag allow_url_fopen on
    php_flag cgi.force_redirect on
    php_flag enable_dl on
    </Ifmodule>
    MrMike
        31
    MrMike  
    OP
       2017 年 7 月 11 日
    哎,,,思维定时了。一直在 firefox 下调试,换 google chrome 上就可以工作了。谢谢各位朋友的不吝赐教。结贴。
    MrMike
        32
    MrMike  
    OP
       2017 年 7 月 11 日
    我用的 firefox 版本是 54.0.1 (64-bit) mac,希望此贴对以后遇到类似问题的朋友有所帮助。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 22:57 · PVG 06:57 · LAX 14:57 · JFK 17:57
    ♥ Do have faith in what you're doing.