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-07-08 18:18:02 +08:00 · 3264 次点击
    这是一个创建于 2677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文件上传的插件用的是 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-07-08 19:12:01 +08:00 via Android
    系统的临时文件所在分区大小。
    Showfom
        2
    Showfom  
       2017-07-08 20:48:25 +08:00
    楼上正解

    还有浏览器也有限制,早期的浏览器最多只能传 4GB
    zjsxwc
        3
    zjsxwc  
       2017-07-08 20:57:23 +08:00 via Android
    大文件推荐文件切片断点续传
    MrMike
        4
    MrMike  
    OP
       2017-07-08 21:52:09 +08:00
    @loading
    @Showfom 感谢指教。
    MrMike
        5
    MrMike  
    OP
       2017-07-08 21:56:15 +08:00
    @zjsxwc 有相关的插件推荐么。谢谢。
    MrMike
        6
    MrMike  
    OP
       2017-07-08 22:42:23 +08:00
    @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-07-08 22:59:17 +08:00
    是这个服务器:

    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-07-08 23:14:55 +08:00
    文件上传大小 和你是否用 dropzone.js 没多大关系,,,主要还是 php apache 或者 nginx 的设置。
    LimitRequestBody 有修改?

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

    github 上很多,比如这个台湾人写的 https://github.com/recca0120/upload
    MrMike
        14
    MrMike  
    OP
       2017-07-09 09:26:06 +08:00
    @zjsxwc 看来跟用哪个插件上传没关系了。换了上传的插件,问题还是一样的。
    MrMike
        15
    MrMike  
    OP
       2017-07-09 09:26:47 +08:00
    @tadtung 我将 LimitRequestBody 设置成了 0,还是不行。
    MrMike
        16
    MrMike  
    OP
       2017-07-09 10:40:31 +08:00
    @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-07-09 10:48:08 +08:00
    @MrMike #14 上传普通的小文件也有问题? (震惊脸
    newghost
        18
    newghost  
       2017-07-09 11:20:10 +08:00
    估计是 tomcat 或 nginx 的上传文件大小限制,改下配置就好了
    MrMike
        19
    MrMike  
    OP
       2017-07-09 11:36:57 +08:00
    @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-07-09 11:37:50 +08:00
    @newghost 我在 apache 里面添加了 LimitRequestBody 2097152000
    重新加载 apache 后,问题还是一样的。
    xuminke
        21
    xuminke  
       2017-07-10 15:13:36 +08:00
    最近也在弄大文件上传,碰到的问题不是文件大小被限制了,而是连接时间过久(因为大文件上传花时间),但是并不会有 timeout 的 error 出来。显先是 java 后端,然后是 nodejs 后端。
    开始认为只要有数据传输,应该不存在超时。但是还是超时了。具体是请求没有结束直接 failed 了。服务端没有任何错误 log。java 层不知道如何设置。改用 nodejs 后: http.createServer(app).setTimeout(1300000),就不会自动断开连接了。
    希望能给到帮助。
    AJian
        22
    AJian  
       2017-07-10 16:04:45 +08:00
    有用 nginx 的话 client_max_body_size
    MrMike
        23
    MrMike  
    OP
       2017-07-10 16:08:28 +08:00
    @xuminke 谢谢。我之前一直用 ajax 的方式来上传,将时间修改成了 3600000,还是不行。。刚才直接用表单提交,服务器端居然可以获取到上传的文件数据。我再查一下,是不是 ajax 还有哪些设置没有找到。
    MrMike
        24
    MrMike  
    OP
       2017-07-10 16:20:56 +08:00
    @AJian 是 apache,服务器上的设置修改了的。刚才直接用表单提交,不使用 ajax 方式,文件可以在服务器端获取到。
    AJian
        25
    AJian  
       2017-07-10 16:33:49 +08:00
    可以把请求代理到 Fiddler4 或者 Charles 抓取请求包分析对比下。
    googlebot
        26
    googlebot  
       2017-07-10 18:48:41 +08:00 via Android
    Apache 的 htaccess,
    MrMike
        27
    MrMike  
    OP
       2017-07-10 20:16:35 +08:00
    @googlebot 能设置的都设置了的。纯表单提交,服务器可以获取提交的数据。用 ajax 就不行。
    Showfom
        28
    Showfom  
       2017-07-10 21:12:16 +08:00
    楼主有没有尝试运维的终极大法?

    reboot
    MrMike
        29
    MrMike  
    OP
       2017-07-11 00:00:47 +08:00
    @Showfom 哈哈,reboot 几次了,就差 reinstall 了。。
    googlebot
        30
    googlebot  
       2017-07-11 09:18:04 +08:00
    @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-07-11 09:18:55 +08:00
    哎,,,思维定时了。一直在 firefox 下调试,换 google chrome 上就可以工作了。谢谢各位朋友的不吝赐教。结贴。
    MrMike
        32
    MrMike  
    OP
       2017-07-11 09:19:46 +08:00
    我用的 firefox 版本是 54.0.1 (64-bit) mac,希望此贴对以后遇到类似问题的朋友有所帮助。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5755 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 08:39 · PVG 16:39 · LAX 00:39 · JFK 03:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.