1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- <?php
- namespace App\Libraries\ChunkedUpload\Disks;
- use App\Libraries\ChunkedUpload\Contacts\ChunkedUploadContact;
- use App\Libraries\ChunkedUpload\Exceptions\UploadFailedException;
- use App\Services\File\Upload\ProgressBar;
- use Illuminate\Http\UploadedFile;
- use Illuminate\Support\Facades\Log;
- use Qcloud\Cos\Client;
- class Cos implements ChunkedUploadContact
- {
- public function upload(UploadedFile $file, string $savePath, string $name, ?ProgressBar $progressBar): string
- {
- $pathname = sprintf("%s/%s", $savePath, $name);
- $cosClient = new Client([
- 'region' => config('filesystems.disks.cos.region'),
- 'credentials' => [
- 'secretId' => config('filesystems.disks.cos.secret_id'),
- 'secretKey' => config('filesystems.disks.cos.secret_key')
- ]
- ]);
- try {
- $notUploadedSize = $file->getSize();
- $options = [
- 'PartSize' => 1 * 1024 * 1024,
- 'Progress' => function ($totalSize, $uploadedSize) use (&$notUploadedSize, $progressBar) {
- $partSize = $uploadedSize - ($totalSize - $notUploadedSize);
- $notUploadedSize = $totalSize - $uploadedSize;
- $progressBar?->increment($partSize);
- },
- 'ACL' => 'private',
- ];
- $cosClient->upload(
- sprintf("%s-%s", config('filesystems.disks.cos.bucket'), config('filesystems.disks.cos.app_id')),
- $pathname,
- fopen($file->getRealPath(), 'rb'),
- $options,
- );
- if ($notUploadedSize > 0) {
- $progressBar?->increment($notUploadedSize);
- }
- } catch (\Exception $exception) {
- Log::error($exception->getTraceAsString());
- throw new UploadFailedException("File upload failed.");
- }
- return $pathname;
- }
- }
|