mirror of
https://github.com/axeloz/filesharing.git
synced 2025-05-06 10:03:55 +02:00
Adding download rate limit + fixing Zip archive when duplicate names
This commit is contained in:
parent
8ceb9f0325
commit
6a5f59a731
4 changed files with 54 additions and 3 deletions
|
@ -11,6 +11,7 @@ UPLOAD_MAX_FILES=1000
|
||||||
UPLOAD_LIMIT_IPS=127.0.0.1
|
UPLOAD_LIMIT_IPS=127.0.0.1
|
||||||
UPLOAD_PREVENT_DUPLICATES=true
|
UPLOAD_PREVENT_DUPLICATES=true
|
||||||
HASH_MAX_FILESIZE=1G
|
HASH_MAX_FILESIZE=1G
|
||||||
|
LIMIT_DOWNLOAD_RATE=1M
|
||||||
|
|
||||||
FILESYSTEM_DISK=local
|
FILESYSTEM_DISK=local
|
||||||
SESSION_DRIVER=file
|
SESSION_DRIVER=file
|
||||||
|
|
|
@ -68,7 +68,28 @@ class BundleController extends Controller
|
||||||
// Adding the files into the Zip with their real names
|
// Adding the files into the Zip with their real names
|
||||||
foreach ($metadata['files'] as $k => $file) {
|
foreach ($metadata['files'] as $k => $file) {
|
||||||
if (file_exists(config('filesystems.disks.uploads.root').'/'.$file['fullpath'])) {
|
if (file_exists(config('filesystems.disks.uploads.root').'/'.$file['fullpath'])) {
|
||||||
$zip->addFile(config('filesystems.disks.uploads.root').'/'.$file['fullpath'], $file['original']);
|
$name = $file['original'];
|
||||||
|
|
||||||
|
// If a file in the archive has the same name
|
||||||
|
if (false !== $zip->locateName($name)) {
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
// Exploding the basename and extension
|
||||||
|
$basename = (false === strrpos($name, '.')) ? $name : substr($name, 0, strrpos($name, '.'));
|
||||||
|
$extension = (false === strrpos($name, '.')) ? null : substr($name, strrpos($name, '.'));
|
||||||
|
|
||||||
|
// Looping to find the right name
|
||||||
|
do {
|
||||||
|
$i++;
|
||||||
|
$newname = $basename.'-'.$i.$extension;
|
||||||
|
}
|
||||||
|
while ($zip->locateName($newname));
|
||||||
|
|
||||||
|
// Final name was found
|
||||||
|
$name = $newname;
|
||||||
|
}
|
||||||
|
// Finally adding files
|
||||||
|
$zip->addFile(config('filesystems.disks.uploads.root').'/'.$file['fullpath'], $name);
|
||||||
|
|
||||||
if (! empty($metadata['password'])) {
|
if (! empty($metadata['password'])) {
|
||||||
$zip->setEncryptionIndex($k, ZipArchive::EM_AES_256);
|
$zip->setEncryptionIndex($k, ZipArchive::EM_AES_256);
|
||||||
|
@ -83,14 +104,40 @@ class BundleController extends Controller
|
||||||
fclose($bundlezip);
|
fclose($bundlezip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Getting file size
|
||||||
|
$filesize = filesize($filename);
|
||||||
|
|
||||||
|
// Should we limit the download rate?
|
||||||
|
$limit_rate = config('sharing.download_limit_rate', false);
|
||||||
|
if ($limit_rate !== false) {
|
||||||
|
$limit_rate = Upload::humanReadableToBytes($limit_rate);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$limit_rate = $filesize;
|
||||||
|
}
|
||||||
|
|
||||||
// Let's download now
|
// Let's download now
|
||||||
header('Content-Type: application/octet-stream');
|
header('Content-Type: application/octet-stream');
|
||||||
header('Content-Disposition: attachment; filename="'.Str::slug($metadata['title']).'-'.time().'.zip'.'"');
|
header('Content-Disposition: attachment; filename="'.Str::slug($metadata['title']).'-'.time().'.zip'.'"');
|
||||||
header('Cache-Control: no-cache, must-revalidate');
|
header('Cache-Control: no-cache, must-revalidate');
|
||||||
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
|
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
|
||||||
//TODO : fix this header('Content-Length: '.filesize($bundlezip));
|
header('Content-Length: '.$filesize);
|
||||||
readfile($filename);
|
|
||||||
|
flush();
|
||||||
|
|
||||||
|
|
||||||
|
$fh = fopen($filename, 'rb');
|
||||||
|
while (! feof($fh)) {
|
||||||
|
echo fread($fh, round($limit_rate));
|
||||||
|
flush();
|
||||||
|
|
||||||
|
if ($limit_rate !== false) {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose($filename);
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Could not find the metadata file
|
// Could not find the metadata file
|
||||||
|
|
|
@ -29,6 +29,8 @@ return [
|
||||||
*/
|
*/
|
||||||
'upload_ip_limit' => env('UPLOAD_LIMIT_IPS', null),
|
'upload_ip_limit' => env('UPLOAD_LIMIT_IPS', null),
|
||||||
|
|
||||||
|
'download_limit_rate' => env('LIMIT_DOWNLOAD_RATE', false),
|
||||||
|
|
||||||
'upload_prevent_duplicates' => env('UPLOAD_PREVENT_DUPLICATES', true),
|
'upload_prevent_duplicates' => env('UPLOAD_PREVENT_DUPLICATES', true),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -95,6 +95,7 @@ In order to configure your application, copy the .env.example file into .env. Th
|
||||||
| `UPLOAD_MAX_FILES` | (*optional*) maximal number of files per bundle |
|
| `UPLOAD_MAX_FILES` | (*optional*) maximal number of files per bundle |
|
||||||
| `UPLOAD_MAX_FILESIZE` | (*optional*) change this to the value you want (K, M, G, T, ...). Attention : you must configure your PHP settings too (`post_max_size`, `upload_max_filesize` and `memory_limit`). When missing, using PHP lowest configuration |
|
| `UPLOAD_MAX_FILESIZE` | (*optional*) change this to the value you want (K, M, G, T, ...). Attention : you must configure your PHP settings too (`post_max_size`, `upload_max_filesize` and `memory_limit`). When missing, using PHP lowest configuration |
|
||||||
| `UPLOAD_LIMIT_IPS` | (*optional*) a comma separated list of IPs from which you may upload files. Different formats are supported : Full IP address (192.168.10.2), Wildcard format (192.168.10.*), CIDR Format (192.168.10/24 or 1.2.3.4/255.255.255.0) or Start-end IP (192.168.10.0-192.168.10.10). When missing, filtering is disabled. |
|
| `UPLOAD_LIMIT_IPS` | (*optional*) a comma separated list of IPs from which you may upload files. Different formats are supported : Full IP address (192.168.10.2), Wildcard format (192.168.10.*), CIDR Format (192.168.10/24 or 1.2.3.4/255.255.255.0) or Start-end IP (192.168.10.0-192.168.10.10). When missing, filtering is disabled. |
|
||||||
|
| `LIMIT_DOWNLOAD_RATE` | (*optional*) if set, limit the download rate. For instance, you may set `LIMIT_DOWNLOAD_RATE=100K` to limit download rate to 100Ko/s |
|
||||||
|
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
Loading…
Add table
Reference in a new issue