workerman做api接口服务,上传大文件不行代码也不报错

小七他哥

问题描述

使用 workerman 做的接口,上传100多KB的小文件没问题,上传127MB的文件,接口就立即返回错误,代码没报错,终端也没有任何输出,接口报错如下图:

本地php环境配置如下图:

程序代码或配置

public function uploadFile() {
        $type = request($this->request->post(), 'type', 'string|required|min:3|max:20');

        if ($type === 'importData') {
            $linkId = request($this->request->post(), 'link_id', 'int|required|min:1');
            $db = request($this->request->post(), 'db', 'string|required|min:1|max:30');
        }

        if (empty($this->request->file('file'))) {
            return $this->echoJson('文件不能为空', 404);
        }

        $code = md5($this->user['id'] . getClientTimeNow() . rand(100, 9999));
        $save = '/tmp/' . PROJECT . '.' . date('YmdHis') . '.' . $code;

        if (!rename($this->request->file('file')[0]['tmp_name'], $save)) {
            return $this->echoJson('保存文件失败', 404);
        }

        if ($type === 'importData') {
            $result = ['file' => $save, 'link_id' => $linkId, 'db' => $db];
        }

        $this->{$type}($result);
    }

操作系统环境及workerman/webman等具体版本

ubuntu 20.04 workerman 4.1.16

380 2 1
2个回答

charlescc

上传的文件大小默认受限于 defaultMaxPackageSize,默认为10M。可以在 config/server.php 文件中通过修改 max_package_size 来更改这个默认值。

  • 小七他哥 2024-10-03

    谢谢,确实,我只需要调大这一个参数的值就行,不过我用的是workerman,在Tcpconnection这个类里找到的这个变量,感觉有点不好的地方是啥提示都没有,希望作者大佬改进下,超过了这个值起码给个提示什么的。

    另外我这个 127MB的文件,上传花了4.5分钟,本地环境,感觉有点慢。

  • 故人重来 2024-10-03

    你都127MB;做切片上传。10s搞定

  • liong 2024-10-04

    怎么做切片上传

  • 故人重来 2024-10-04

    前端分片,后端合片

小七他哥
  • 暂无评论
×
🔝