Laravel8 使用阿里云 OSS 对象存储服务 上传文件慢

如图已经创建了 Bucket,购买并开启了传输加速服务(似乎并没有起作用)

img


Laravel 代码部分 Services

<?php

namespace App\Services;

use OSS\OssClient;
use OSS\Core\OssException;

class Oss
{
   // 阿里云OSS文件上传 官网参考链接 https://help.aliyun.com/document_detail/88473.html
    public function uploadFile($file)
    {
        $path = $file->getRealPath();
        $ext = $file->getClientOriginalExtension();
        $object = 'file/' . date('Ymd') . '/' . time() . '.' . $ext;
        $ossClient = new OssClient(env('OSS_ACCESS_KEY_ID'), env('OSS_ACCESS_KEY_SECRET'), env('OSS_ENDPOINT_SPEED'));

        try {
            $ossClient->uploadFile(env('OSS_BUCKET'), $object, $path);
        } catch (OssException $err) {
            printf(__FUNCTION__ . ": FAILED\n");
            printf($err->getMessage() . "\n");
            return false;
        }
        return env('OSS_FILE_SPEED_DOMAIN') . $object;
    }
}

Laravel 代码部分 Controller 中调用 Services 的上传方法

<?php

namespace App\Http\Controllers\common;

use App\Http\Controllers\BaseController;
use App\Services\Mapping;
use App\Services\Oss;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class UploadController extends BaseController
{
    public function uploadFile(Request $request)
    {
        $req = $request->all();
        // 文件大小限制20MB
        $rules = [
            'file' => 'file|mimes:pdf|between:0,20480',
        ];
        $validator = Validator::make($req, $rules, Mapping::$rulesMsg);
        if (!$validator->passes()) return $this->created(null, $validator->errors()->first(), 202);

        $oss = new Oss();
        $url = $oss->uploadFile($req['file']);
        if ($url) return $this->created($url, '上传成功');
        else return $this->created(null, Mapping::$code['4000'], 4000);

    }
}

9MB 左右大小的 PDF 文件上传时间大约在30秒左右

img

寻求帮主

我想前端用户上传的所有文件都存储在 Bucket 中
为什么上传这么慢导致前端页面需要等待约30多秒才能收到返回的数据
是我哪里使用的方法不对吗,需要怎么才能改善上传文件过慢的问题

是这是在本地测试的? 你是不是开启了Xdebug?框架是否开启了调式模式?都关掉再试试。

首先抛开框架,单独的文件去请求上传oss测试下,是否是框架影响速度原因。
如果是框架,那么下一步就可以找找框架为什么慢的原因,哪一步影响速度了。
如果不是框架,就是oss上传慢,那可以试试能不能从业务上来优化,比如可以先上传到服务器上,
后置异步处理文件上传oss后删除服务器文件来处理。总之解决问题的方法有很多。