72 lines
2.1 KiB
PHP
72 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\EntryFile;
|
|
use App\Services\FileServersService;
|
|
use Illuminate\Http\Client\ConnectionException;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class FileServerController extends Controller {
|
|
|
|
public function __construct(private FileServersService $fs) {}
|
|
|
|
/**
|
|
* @throws ConnectionException
|
|
*/
|
|
public function uploadChunk(Request $request, string $section): JsonResponse {
|
|
$request->validate([
|
|
'file' => 'required|file',
|
|
'file_uuid' => 'required|string|max:128',
|
|
'current_chunk' => 'required|integer|min:0',
|
|
'total_chunks' => 'required|integer|min:1',
|
|
'filename' => 'required|string|max:255',
|
|
]);
|
|
|
|
$type = $section;
|
|
$fileUuid = $request->input('file_uuid');
|
|
$currentChunk = (int) $request->input('current_chunk');
|
|
$totalChunks = (int) $request->input('total_chunks');
|
|
$filename = $request->input('filename');
|
|
|
|
$data = $this->fs->uploadChunk(
|
|
$request->file('file'),
|
|
$fileUuid,
|
|
$currentChunk,
|
|
$totalChunks,
|
|
$filename,
|
|
$type
|
|
);
|
|
|
|
if( !isset( $data['file'] ) || $data['file'] === false ){
|
|
$data['finished'] = false;
|
|
return response()->json($data);
|
|
}
|
|
|
|
\Cache::put("uploaded_file_{$fileUuid}", [
|
|
'uuid' => $fileUuid,
|
|
'type' => $type,
|
|
'filename' => $filename,
|
|
'filepath' => $data['file_path'],
|
|
'filesize' => $data['file']['size'],
|
|
'favorite_server' => $data['favorite_server'],
|
|
'favorite_at' => time()
|
|
], now()->addHours(2) );
|
|
|
|
$data['finished'] = true;
|
|
return response()->json($data);
|
|
|
|
}
|
|
|
|
public function download(Request $request, int $entry_id, EntryFile $file ) {
|
|
|
|
if( $file->entry_id != $entry_id ) {
|
|
abort(404);
|
|
}
|
|
|
|
// TODO: DL Count.
|
|
return redirect( $this->fs->getDownloadFileUrl( $file) );
|
|
}
|
|
}
|