- download multiple files in public folder

- frontend build
This commit is contained in:
Peter Papp
2020-12-19 11:34:32 +01:00
parent b16f22b0eb
commit a10d394abb
16 changed files with 520 additions and 464 deletions

View File

@@ -122,6 +122,32 @@ class FileAccessController extends Controller
return Storage::download($zip_path, $zip->basename, $header);
}
/**
* Get generated zip for guest
*
* @param $id
* @param $token
* @return \Symfony\Component\HttpFoundation\StreamedResponse
*/
public function get_zip_public($id, $token)
{
$zip = Zip::where('id', $id)
->where('shared_token', $token)
->first();
$zip_path = 'zip/' . $zip->basename;
$header = [
"Content-Type" => 'application/zip',
"Content-Length" => Storage::size($zip_path),
"Accept-Ranges" => "bytes",
"Content-Range" => "bytes 0-600/" . Storage::size($zip_path),
"Content-Disposition" => "attachment; filename=" . $zip->basename,
];
return Storage::download($zip_path, $zip->basename, $header);
}
/**
* Get file public
*

View File

@@ -356,6 +356,44 @@ class EditItemsController extends Controller
], 200);
}
/**
* Guest download multiple files via zip
*
* @param Request $request
* @param $token
* @return string
*/
public function guest_zip_multiple_files(Request $request, $token)
{
// Get shared record
$shared = get_shared($token);
$file_parent_folders = FileManagerFile::whereUserId($shared->user_id)
->whereIn('unique_id', $request->input('files'))
->get()
->pluck('folder_id')
->toArray();
// Check access to requested directory
Guardian::check_item_access($file_parent_folders, $shared);
// Get requested files
$files = FileManagerFile::whereUserId($shared->user_id)
->whereIn('unique_id', $request->input('files'))
->get();
$zip = Editor::zip_files($files, $shared);
// Get file
return response([
'url' => route('zip_public', [
'id' => $zip->id,
'token' => $shared->token,
]),
'name' => $zip->basename,
], 200);
}
/**
* Move item for authenticated master|editor user
*

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\FileFunctions;
use App\Http\Requests\Share\CreateShareRequest;
use App\Http\Requests\Share\UpdateShareRequest;
use App\Http\Resources\ShareResource;
use App\Zip;
use Illuminate\Contracts\Routing\ResponseFactory;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
@@ -95,16 +96,24 @@ class ShareController extends Controller
*/
public function destroy(Request $request)
{
foreach($request->input('folders') as $tokens) {
foreach($request->input('tokens') as $folder) {
// Get sharing record
$shared = Share::where('token', $tokens['token'])
Share::where('token', $folder['token'])
->where('user_id', Auth::id())
->firstOrFail();
->firstOrFail()
->delete();
// Delete shared record
$shared->delete();
// Get zip record
$zip = Zip::where('shared_token', $folder['token'])
->where('user_id', Auth::id())
->first();
if ($zip) {
$zip->delete();
}
}
// Done
return response('Done!', 204);
}

View File

@@ -31,10 +31,11 @@ class Editor
* Zip selected files, store it in /zip folder and retrieve zip record
*
* @param $files
* @param null $shared
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public static function zip_files($files)
public static function zip_files($files, $shared = null)
{
// Local storage instance
$disk_local = Storage::disk('local');
@@ -89,8 +90,9 @@ class Editor
// Store zip record
return Zip::create([
'user_id' => Auth::id(),
'basename' => $zip_name,
'user_id' => $shared->user_id ?? Auth::id(),
'shared_token' => $shared->token ?? null,
'basename' => $zip_name,
]);
}