【已解决】webman文件上传RuntimeException: Cannot read from file

fisha

问题描述

这里实现了一个文件上传接口,限制了文件mime为js和jsx,但是可以上传其他格式的文件,上传js或jsx文件时报错,而且只有上传js或jsx的时候会报这个错误
截图
截图
具体报错内容贴下面了

程序代码

  public function widgetFile(Request $request): Response
    {
        try {
            $file = $request->file('file');
            try {
                $v = v::file()
                    ->size(null, '20MB')
                    ->oneOf(
                        v::mimetype('application/javascript')->setName('file'),
                        v::mimetype('text/jsx')->setName('file')
                    );

                $v->validate($file);
            } catch (ValidationException $e) {
                return badRequest('只允许上传大小不超过50MB的js或jsx文件');
            }

            if (!$file->isReadable()) {
                return badRequest('文件资源无效');
            }

            $path = $this->uploadToCdn($file->getUploadExtension(), $file->openFile());
            if (empty($path)) return badRequest('上传失败,请稍后重试');
            return success(['url' => $path]);
        } catch (Exception $e) {
            Log::error($e->getMessage(), ['message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'code' => $e->getCode(), 'trace' => $e->getTrace()]);
            return serverError();
        }
    }

报错信息

RuntimeException: Cannot read from file C:\Users\fish\AppData\Local\Temp\wor622D.tmp in
F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php:182<br />
Stack trace:<br />
#0 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(182): SplFileObject->__toString()<br />
#1 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(159): Monolog\Formatter\NormalizerFormatter->normalize(Object(SplFileObject), 5)<br />
#2 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(159): Monolog\Formatter\NormalizerFormatter->normalize(Array, 4)<br />
#3 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(159): Monolog\Formatter\NormalizerFormatter->normalize(Array, 3)<br />
#4 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(159): Monolog\Formatter\NormalizerFormatter->normalize(Array, 2)<br />
#5 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(159): Monolog\Formatter\NormalizerFormatter->normalize(Array, 1)<br />
#6 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\NormalizerFormatter.php(55): Monolog\Formatter\NormalizerFormatter->normalize(Array)<br />
#7 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Formatter\LineFormatter.php(84): Monolog\Formatter\NormalizerFormatter->format(Array)<br />
#8 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Handler\AbstractProcessingHandler.php(46): Monolog\Formatter\LineFormatter->format(Array)<br />
#9 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Logger.php(400): Monolog\Handler\AbstractProcessingHandler->handle(Array)<br />
#10 F:\cocotais\creation-project\backend-php\vendor\monolog\monolog\src\Monolog\Logger.php(651): Monolog\Logger->addRecord(400, '\xE6\x96\x87\xE4\xBB\xB6\xE4\xB8\x8A\xE4\xBC\xA0\xE5\xA4\xB1...', Array)<br />
#11 F:\cocotais\creation-project\backend-php\vendor\workerman\webman-framework\src\support\Log.php(137): Monolog\Logger->error('\xE6\x96\x87\xE4\xBB\xB6\xE4\xB8\x8A\xE4\xBC\xA0\xE5\xA4\xB1...', Array)<br />
#12 F:\cocotais\creation-project\backend-php\app\controller\FileController.php(66): support\Log::__callStatic('error', Array)<br />
#13 F:\cocotais\creation-project\backend-php\vendor\workerman\webman-framework\src\App.php(335): app\controller\FileController->widgetFile(Object(support\Request))<br />
#14 F:\cocotais\creation-project\backend-php\vendor\workerman\webman-framework\src\App.php(358): Webman\App::Webman\{closure}(Object(support\Request))<br />
#15 F:\cocotais\creation-project\backend-php\vendor\webman\rate-limiter\src\Limiter.php(109): Webman\App::Webman\{closure}(Object(support\Request))<br />
#16 F:\cocotais\creation-project\backend-php\vendor\workerman\webman-framework\src\App.php(351): Webman\RateLimiter\Limiter->process(Object(support\Request), Object(Closure))<br />
#17 F:\cocotais\creation-project\backend-php\vendor\workerman\webman-framework\src\App.php(148): Webman\App::Webman\{closure}(Object(support\Request))<br />
#18 F:\cocotais\creation-project\backend-php\vendor\workerman\workerman\src\Connection\TcpConnection.php(749): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))<br />
#19 F:\cocotais\creation-project\backend-php\vendor\workerman\workerman\src\Events\Select.php(400): Workerman\Connection\TcpConnection->baseRead(Resource id #260)<br />
#20 F:\cocotais\creation-project\backend-php\vendor\workerman\workerman\src\Worker.php(1594): Workerman\Events\Select->run()<br />
#21 F:\cocotais\creation-project\backend-php\vendor\workerman\workerman\src\Worker.php(1519): Workerman\Worker::forkWorkersForWindows()<br />
#22 F:\cocotais\creation-project\backend-php\vendor\workerman\workerman\src\Worker.php(585): Workerman\Worker::forkWorkers()<br />
#23 F:\cocotais\creation-project\backend-php\runtime\windows\start_webman.php(33): Workerman\Worker::runAll()<br />
#24 {main}

操作系统及workerman/webman等框架组件具体版本

Workerman/5.0.1
PHP/8.2.27 (Jit off)
Windows NT/10.0
截图

120 4 0
4个回答

xiuwang

你要自己定位具体是widgetFile里哪一行代码抛出的异常

  • 暂无评论
fisha

感觉日志库好像有点问题,把日志哪一行删掉就没有那个报错了

  • 暂无评论
xiuwang

如果其它后缀文件没问题,只有js jsx有问题,可能是触发了操作系统什么安全机制,认为是有害文件,不允许读取。
关闭杀毒获取操作系统安全中心试下吧

  • 暂无评论
xiuwang

看标题解决了,那么是什么问题导致的呢?

  • 暂无评论
×
🔝