mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 19:10:40 +00:00
multipart upload
This commit is contained in:
@@ -343,6 +343,17 @@ function format_gigabytes($gigabytes)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert megabytes to bytes
|
||||||
|
*
|
||||||
|
* @param $megabytes
|
||||||
|
* @return int|string
|
||||||
|
*/
|
||||||
|
function format_bytes($megabytes)
|
||||||
|
{
|
||||||
|
return Metric::megabytes($megabytes)->numberOfBytes();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get storage usage in percent
|
* Get storage usage in percent
|
||||||
*
|
*
|
||||||
|
|||||||
+84
-42
@@ -8,12 +8,16 @@ use App\FileManagerFile;
|
|||||||
use App\FileManagerFolder;
|
use App\FileManagerFolder;
|
||||||
use App\Http\Requests\FileFunctions\RenameItemRequest;
|
use App\Http\Requests\FileFunctions\RenameItemRequest;
|
||||||
use App\User;
|
use App\User;
|
||||||
|
use Aws\Exception\MultipartUploadException;
|
||||||
|
use Aws\S3\MultipartUploader;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Intervention\Image\ImageManagerStatic as Image;
|
use Intervention\Image\ImageManagerStatic as Image;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||||
|
|
||||||
|
|
||||||
class Editor
|
class Editor
|
||||||
@@ -188,6 +192,42 @@ class Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move folder or file to new location
|
||||||
|
*
|
||||||
|
* @param $request
|
||||||
|
* @param $unique_id
|
||||||
|
* @param null $shared
|
||||||
|
*/
|
||||||
|
public static function move($request, $unique_id, $shared = null)
|
||||||
|
{
|
||||||
|
// Get user id
|
||||||
|
$user_id = is_null($shared) ? Auth::id() : $shared->user_id;
|
||||||
|
|
||||||
|
if ($request->from_type === 'folder') {
|
||||||
|
|
||||||
|
// Move folder
|
||||||
|
$item = FileManagerFolder::where('user_id', $user_id)
|
||||||
|
->where('unique_id', $unique_id)
|
||||||
|
->firstOrFail();
|
||||||
|
|
||||||
|
$item->update([
|
||||||
|
'parent_id' => $request->to_unique_id
|
||||||
|
]);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Move file under new folder
|
||||||
|
$item = FileManagerFile::where('user_id', $user_id)
|
||||||
|
->where('unique_id', $unique_id)
|
||||||
|
->firstOrFail();
|
||||||
|
|
||||||
|
$item->update([
|
||||||
|
'folder_id' => $request->to_unique_id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upload file
|
* Upload file
|
||||||
*
|
*
|
||||||
@@ -269,38 +309,61 @@ class Editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move folder or file to new location
|
* Move file to external storage if is set
|
||||||
*
|
*
|
||||||
* @param $request
|
* @param string $filename
|
||||||
* @param $unique_id
|
* @param string|null $thumbnail
|
||||||
* @param null $shared
|
|
||||||
*/
|
*/
|
||||||
public static function move($request, $unique_id, $shared = null)
|
private static function move_to_external_storage(string $filename, ?string $thumbnail): void
|
||||||
{
|
{
|
||||||
// Get user id
|
foreach ([$filename, $thumbnail] as $file) {
|
||||||
$user_id = is_null($shared) ? Auth::id() : $shared->user_id;
|
|
||||||
|
|
||||||
if ($request->from_type === 'folder') {
|
// Check if file exist
|
||||||
|
if (!$file) continue;
|
||||||
|
|
||||||
// Move folder
|
// Get file size
|
||||||
$item = FileManagerFolder::where('user_id', $user_id)
|
$filesize = Storage::disk('local')->size('file-manager/' . $filename);
|
||||||
->where('unique_id', $unique_id)
|
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
$item->update([
|
// If file is bigger than 5.2MB then run multipart upload
|
||||||
'parent_id' => $request->to_unique_id
|
if ($filesize > 5242880) {
|
||||||
|
|
||||||
|
// Get driver
|
||||||
|
$driver = \Storage::getDriver();
|
||||||
|
|
||||||
|
// Get adapter
|
||||||
|
$adapter = $driver->getAdapter();
|
||||||
|
|
||||||
|
// Get client
|
||||||
|
$client = $adapter->getClient();
|
||||||
|
|
||||||
|
// Prepare the upload parameters.
|
||||||
|
$uploader = new MultipartUploader($client, storage_path() . '/app/file-manager/' . $file, [
|
||||||
|
'bucket' => $adapter->getBucket(),
|
||||||
|
'key' => 'file-manager/' . $file
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Upload content
|
||||||
|
try {
|
||||||
|
$uploader->upload();
|
||||||
|
|
||||||
|
} catch (MultipartUploadException $e) {
|
||||||
|
|
||||||
|
Log::error($e->getMessage());
|
||||||
|
|
||||||
|
// Delete file after error
|
||||||
|
Storage::disk('local')->delete('file-manager/' . $file);
|
||||||
|
|
||||||
|
throw new HttpException(409, $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Move file under new folder
|
// Stream file object to s3
|
||||||
$item = FileManagerFile::where('user_id', $user_id)
|
Storage::putFileAs('/file-manager', storage_path() . '/app/file-manager/' . $file, $file, 'private');
|
||||||
->where('unique_id', $unique_id)
|
}
|
||||||
->firstOrFail();
|
|
||||||
|
|
||||||
$item->update([
|
// Delete file after upload
|
||||||
'folder_id' => $request->to_unique_id
|
Storage::disk('local')->delete('file-manager/' . $file);
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,25 +421,4 @@ class Editor
|
|||||||
|
|
||||||
return $thumbnail ?? null;
|
return $thumbnail ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Move file to external storage if is set
|
|
||||||
*
|
|
||||||
* @param string $filename
|
|
||||||
* @param string|null $thumbnail
|
|
||||||
*/
|
|
||||||
private static function move_to_external_storage(string $filename, ?string $thumbnail): void
|
|
||||||
{
|
|
||||||
foreach ([$filename, $thumbnail] as $file) {
|
|
||||||
|
|
||||||
// Check if file exist
|
|
||||||
if (!$file) continue;
|
|
||||||
|
|
||||||
// Move file
|
|
||||||
Storage::putFileAs('/file-manager', storage_path() . '/app/file-manager/' . $file, $file, 'private');
|
|
||||||
|
|
||||||
// Delete file after upload
|
|
||||||
Storage::disk('local')->delete('file-manager/' . $file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'version' => '1.7',
|
'version' => '1.7.3',
|
||||||
|
|
||||||
|
// Define size of chunk uploaded by MB. E.g. integer 128 means chunk size will be 128MB.
|
||||||
|
'chunk_size' => '128',
|
||||||
|
|
||||||
'pages' => [
|
'pages' => [
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"/js/main.js": "/js/main.js",
|
"/js/main.js": "/js/main.js",
|
||||||
"/css/app.css": "/css/app.css"
|
"/css/app.css": "/css/app.css",
|
||||||
|
"/js/main.2a26d6321a7d4c8431ce.hot-update.js": "/js/main.2a26d6321a7d4c8431ce.hot-update.js"
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -98,7 +98,7 @@ const Helpers = {
|
|||||||
chunks = []
|
chunks = []
|
||||||
|
|
||||||
// Calculate ceils
|
// Calculate ceils
|
||||||
let size = 1388608,
|
let size = this.$store.getters.config.chunkSize,
|
||||||
chunksCeil = Math.ceil(file.size / size);
|
chunksCeil = Math.ceil(file.size / size);
|
||||||
|
|
||||||
// Create chunks
|
// Create chunks
|
||||||
|
|||||||
@@ -58,6 +58,8 @@
|
|||||||
|
|
||||||
installation: '{{ $installation ?? '' }}',
|
installation: '{{ $installation ?? '' }}',
|
||||||
latest_upgrade: '{{ isset($settings->latest_upgrade) && $settings->latest_upgrade ? $settings->latest_upgrade : null }}',
|
latest_upgrade: '{{ isset($settings->latest_upgrade) && $settings->latest_upgrade ? $settings->latest_upgrade : null }}',
|
||||||
|
|
||||||
|
chunkSize: {{ format_bytes(config('vuefilemanager.chunk_size')) }},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user