mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-27 10:40:38 +00:00
remote upload for shared route
This commit is contained in:
@@ -1,15 +1,14 @@
|
||||
<?php
|
||||
namespace Domain\Files\Actions;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Domain\Files\Models\File;
|
||||
use Log;
|
||||
use Error;
|
||||
use ErrorException;
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Log;
|
||||
use Spatie\QueueableAction\QueueableAction;
|
||||
|
||||
class GetContentFromExternalSource
|
||||
@@ -22,7 +21,8 @@ class GetContentFromExternalSource
|
||||
public MoveFileToFTPStorageAction $moveFileToFTPStorage,
|
||||
public ProcessImageThumbnailAction $createImageThumbnail,
|
||||
public MoveFileToExternalStorageAction $moveFileToExternalStorage,
|
||||
) {}
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
array $payload,
|
||||
@@ -80,7 +80,7 @@ class GetContentFromExternalSource
|
||||
'ftp', 'azure' => ($this->moveFileToFTPStorage)($basename, $user->id),
|
||||
default => null
|
||||
};
|
||||
} catch ( ErrorException | Error $e) {
|
||||
} catch (ErrorException | Error $e) {
|
||||
Log::error("Remote upload failed as {$e->getMessage()}");
|
||||
Log::error($e->getTraceAsString());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Files\Actions;
|
||||
|
||||
use Domain\Files\Models\File;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Files\Controllers;
|
||||
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Requests\RemoteUploadRequest;
|
||||
use Domain\Files\Actions\GetContentFromExternalSource;
|
||||
@@ -13,7 +12,8 @@ class RemoteUploadFileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public GetContentFromExternalSource $getContentFromExternalSource,
|
||||
) {}
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(RemoteUploadRequest $request, ?Share $shared = null): Response|array
|
||||
{
|
||||
|
||||
@@ -12,8 +12,8 @@ use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
class UploadFileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public ProcessFileAction $processFie,
|
||||
public FakeUploadFileAction $fakeUploadFile,
|
||||
public ProcessFileAction $processFie,
|
||||
public FakeUploadFileAction $fakeUploadFile,
|
||||
public StoreFileChunksAction $storeFileChunks,
|
||||
) {
|
||||
}
|
||||
@@ -23,7 +23,8 @@ class UploadFileController extends Controller
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public function __invoke(UploadRequest $request) {
|
||||
public function __invoke(UploadRequest $request)
|
||||
{
|
||||
if (is_demo_account()) {
|
||||
return ($this->fakeUploadFile)($request);
|
||||
}
|
||||
@@ -33,7 +34,6 @@ class UploadFileController extends Controller
|
||||
|
||||
// Proceed after last chunk
|
||||
if ($request->boolean('is_last')) {
|
||||
|
||||
// Process file
|
||||
$file = ($this->processFie)($request, null, $chunkPath);
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
namespace Domain\Files\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Requests\RemoteUploadRequest;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
use Domain\Files\Actions\GetContentFromExternalSource;
|
||||
|
||||
class VisitorRemoteUploadFileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public ProtectShareRecordAction $protectShareRecord,
|
||||
public VerifyAccessToItemAction $verifyAccessToItem,
|
||||
public GetContentFromExternalSource $getContentFromExternalSource,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(RemoteUploadRequest $request, ?Share $shared = null): Response|array
|
||||
{
|
||||
// Check ability to access protected share record
|
||||
($this->protectShareRecord)($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403, "You don't have access to this item");
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
($this->verifyAccessToItem)($request->input('parent_id'), $shared);
|
||||
|
||||
// Execute job for get content from url and save
|
||||
($this->getContentFromExternalSource)($request->all(), $shared->user);
|
||||
|
||||
return response('Files were successfully added to the upload queue', 201);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ use Domain\Files\Requests\UploadRequest;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Domain\Files\Actions\ProcessFileAction;
|
||||
use Support\Demo\Actions\FakeUploadFileAction;
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
use Domain\Files\Actions\StoreFileChunksAction;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
@@ -19,8 +19,9 @@ use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
class VisitorUploadFileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private ProcessFileAction $uploadFile,
|
||||
private FakeUploadFileAction $fakeUploadFile,
|
||||
public ProcessFileAction $processFie,
|
||||
public StoreFileChunksAction $storeFileChunks,
|
||||
private FakeUploadFileAction $fakeUploadFile,
|
||||
private ProtectShareRecordAction $protectShareRecord,
|
||||
private VerifyAccessToItemAction $verifyAccessToItem,
|
||||
) {
|
||||
@@ -48,19 +49,18 @@ class VisitorUploadFileController extends Controller
|
||||
// Check access to requested directory
|
||||
($this->verifyAccessToItem)($request->input('parent_id'), $shared);
|
||||
|
||||
try {
|
||||
// Return new uploaded file
|
||||
$file = ($this->uploadFile)($request, $shared->user_id);
|
||||
// Store file chunks
|
||||
$chunkPath = ($this->storeFileChunks)($request);
|
||||
|
||||
// Proceed after last chunk
|
||||
if ($request->boolean('is_last')) {
|
||||
// Process file
|
||||
$file = ($this->processFie)($request, $shared->user_id, $chunkPath);
|
||||
|
||||
// Set public access url
|
||||
$file->setSharedPublicUrl($shared->token);
|
||||
|
||||
return response(new FileResource($file), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
return response([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class RemoteUploadRequest extends FormRequest
|
||||
{
|
||||
return [
|
||||
'urls.*' => 'required|url',
|
||||
'parent_id' => 'nullable|uuid',
|
||||
'parent_id' => 'nullable|uuid',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Files\Requests;
|
||||
|
||||
use Domain\Admin\Rules\DisabledMimetypes;
|
||||
|
||||
@@ -6,13 +6,14 @@ use Domain\Folders\Models\Folder;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Domain\Files\Actions\ProcessFileAction;
|
||||
use Domain\UploadRequest\Models\UploadRequest;
|
||||
use App\Users\Exceptions\InvalidUserActionException;
|
||||
use Domain\Files\Actions\StoreFileChunksAction;
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
|
||||
class UploadFilesForUploadRequestController
|
||||
{
|
||||
public function __construct(
|
||||
private ProcessFileAction $uploadFile,
|
||||
private ProcessFileAction $processFie,
|
||||
private StoreFileChunksAction $storeFileChunks,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -29,14 +30,18 @@ class UploadFilesForUploadRequestController
|
||||
$this->createFolder($uploadRequest);
|
||||
}
|
||||
|
||||
try {
|
||||
// Set default parent_id for uploaded file
|
||||
if (is_null($request->input('parent_id'))) {
|
||||
$request->merge(['parent_id' => $uploadRequest->id]);
|
||||
}
|
||||
// Set default parent_id for uploaded file
|
||||
if (is_null($request->input('parent_id'))) {
|
||||
$request->merge(['parent_id' => $uploadRequest->id]);
|
||||
}
|
||||
|
||||
// Upload file
|
||||
$file = ($this->uploadFile)($request, $uploadRequest->user_id);
|
||||
// Store file chunks
|
||||
$chunkPath = ($this->storeFileChunks)($request);
|
||||
|
||||
// Proceed after last chunk
|
||||
if ($request->boolean('is_last')) {
|
||||
// Process file
|
||||
$file = ($this->processFie)($request, $uploadRequest->user_id, $chunkPath);
|
||||
|
||||
// Set public access url
|
||||
$file->setUploadRequestPublicUrl($uploadRequest->id);
|
||||
@@ -44,13 +49,7 @@ class UploadFilesForUploadRequestController
|
||||
// Set timestamp for auto filling
|
||||
cache()->set("auto-filling.$uploadRequest->id", now()->toString());
|
||||
|
||||
// Return new uploaded file
|
||||
return response(new FileResource($file), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
return response([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user