<?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;
}
}
<?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);
}
}
我想前端用户上传的所有文件都存储在 Bucket 中
为什么上传这么慢导致前端页面需要等待约30多秒才能收到返回的数据
是我哪里使用的方法不对吗,需要怎么才能改善上传文件过慢的问题
是这是在本地测试的? 你是不是开启了Xdebug?框架是否开启了调式模式?都关掉再试试。
首先抛开框架,单独的文件去请求上传oss测试下,是否是框架影响速度原因。
如果是框架,那么下一步就可以找找框架为什么慢的原因,哪一步影响速度了。
如果不是框架,就是oss上传慢,那可以试试能不能从业务上来优化,比如可以先上传到服务器上,
后置异步处理文件上传oss后删除服务器文件来处理。总之解决问题的方法有很多。