首页 > 其他分享 >多用户文件管理器-FileGator

多用户文件管理器-FileGator

时间:2025-01-08 11:23:13浏览次数:1  
标签:FileGator Filegator filegator 管理器 多用户 handler Services config DIR

简介

logo FileGator 是一个免费的、开源的、自托管的 Web 应用程序,用于管理文件和文件夹。 您可以管理本地存储库文件夹(在服务器的硬盘驱动器上)中的文件,也可以连接到其他存储适配器。 FileGator 具有多用户支持,因此您可以让管理员和其他用户使用不同的访问权限、角色和主文件夹管理文件。 支持所有基本文件操作:复制、移动、重命名、创建、删除、压缩、解压缩、下载、上传。 如果允许,用户可以一次下载多个文件或文件夹。 文件上传支持拖放、进度条、暂停和恢复。Upload 是分块的,因此无论您的服务器配置如何,您都应该能够上传大文件。

特点和目标

  • 多个存储适配器(Local、FTP、Amazon S3、Dropbox、DO Spaces、Azure Blob 和许多其他通过 Flysystem 的适配器)
  • 具有角色和权限的多个身份验证适配器(将用户存储在 json 文件、数据库中或使用 WordPress)
  • 多个会话适配器(Native File、Pdo、Redis、MongoDB、Memcached 等通过 Symfony)
  • 单页前端(使用 Vuejs、Bulma 和 Buefy 构建)
  • 分块上传(使用 Resumable.js 构建)
  • Zip 和批量下载支持
  • 高度可扩展、解耦和测试的代码
  • 无需数据库
描述文字 描述文字

官网


docker测试部署

$ docker run -p 8080:8080 -d filegator/filegator
visit: http://<IP>:8080 login as admin/admin123

docker compose部署

准备配置文件

cat configuration.php

<?php

return [
    'public_path' => APP_PUBLIC_PATH,
    'public_dir' => APP_PUBLIC_DIR,
    'overwrite_on_upload' => false,
    'timezone' => 'UTC', // https://www.php.net/manual/en/timezones.php
    'download_inline' => ['pdf'], // download inline in the browser, array of extensions, use * for all
    'lockout_attempts' => 5, // max failed login attempts before ip lockout
    'lockout_timeout' => 15, // ip lockout timeout in seconds

    'frontend_config' => [
        'app_name' => 'FileGator',
        'app_version' => APP_VERSION,
        'language' => 'chinese', //主要是要修改语言
        'logo' => 'https://filegator.io/filegator_logo.svg',
        'upload_max_size' => 100 * 1024 * 1024, // 100MB
        'upload_chunk_size' => 1 * 1024 * 1024, // 1MB
        'upload_simultaneous' => 3,
        'default_archive_name' => 'archive.zip',
        'editable' => ['.txt', '.css', '.js', '.ts', '.html', '.php', '.json', '.md'],
        'date_format' => 'YY/MM/DD hh:mm:ss', // see: https://momentjs.com/docs/#/displaying/format/
        'guest_redirection' => '', // useful for external auth adapters
        'search_simultaneous' => 5,
        'filter_entries' => [],
    ],

    'services' => [
        'Filegator\Services\Logger\LoggerInterface' => [
            'handler' => '\Filegator\Services\Logger\Adapters\MonoLogger',
            'config' => [
                'monolog_handlers' => [
                    function () {
                        return new \Monolog\Handler\StreamHandler(
                            __DIR__.'/private/logs/app.log',
                            \Monolog\Logger::DEBUG
                        );
                    },
                ],
            ],
        ],
        'Filegator\Services\Session\SessionStorageInterface' => [
            'handler' => '\Filegator\Services\Session\Adapters\SessionStorage',
            'config' => [
                'handler' => function () {
                    $save_path = null; // use default system path
                    //$save_path = __DIR__.'/private/sessions';
                    $handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler($save_path);

                    return new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([
                            "cookie_samesite" => "Lax",
                            "cookie_secure" => null,
                            "cookie_httponly" => true,
                        ], $handler);
                },
            ],
        ],
        'Filegator\Services\Cors\Cors' => [
            'handler' => '\Filegator\Services\Cors\Cors',
            'config' => [
                'enabled' => APP_ENV == 'production' ? false : true,
            ],
        ],
        'Filegator\Services\Tmpfs\TmpfsInterface' => [
            'handler' => '\Filegator\Services\Tmpfs\Adapters\Tmpfs',
            'config' => [
                'path' => __DIR__.'/private/tmp/',
                'gc_probability_perc' => 10,
                'gc_older_than' => 60 * 60 * 24 * 2, // 2 days
            ],
        ],
        'Filegator\Services\Security\Security' => [
            'handler' => '\Filegator\Services\Security\Security',
            'config' => [
                'csrf_protection' => true,
                'csrf_key' => "123456", // randomize this
                'ip_allowlist' => [],
                'ip_denylist' => [],
                'allow_insecure_overlays' => false,
            ],
        ],
        'Filegator\Services\View\ViewInterface' => [
            'handler' => '\Filegator\Services\View\Adapters\Vuejs',
            'config' => [
                'add_to_head' => '',
                'add_to_body' => '',
            ],
        ],
        'Filegator\Services\Storage\Filesystem' => [
            'handler' => '\Filegator\Services\Storage\Filesystem',
            'config' => [
                'separator' => '/',
                'config' => [],
                'adapter' => function () {
                    return new \League\Flysystem\Adapter\Local(
                        __DIR__.'/repository'
                    );
                },
            ],
        ],
        'Filegator\Services\Archiver\ArchiverInterface' => [
            'handler' => '\Filegator\Services\Archiver\Adapters\ZipArchiver',
            'config' => [],
        ],
        'Filegator\Services\Auth\AuthInterface' => [
            'handler' => '\Filegator\Services\Auth\Adapters\JsonFile',
            'config' => [
                'file' => __DIR__.'/private/users.json',
            ],
        ],
        'Filegator\Services\Router\Router' => [
            'handler' => '\Filegator\Services\Router\Router',
            'config' => [
                'query_param' => 'r',
                'routes_file' => __DIR__.'/backend/Controllers/routes.php',
            ],
        ],
    ],
];

准备配置文件主要是为了能修改语言
可以参看 https://docs.filegator.io/translations/default.html

资源清单文件

services:
  filegator:
    container_name: filegator
    image: filegator/filegator:latest
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./configuration.php:/var/www/filegator/configuration.php
      - ./repository:/var/www/filegator/repository

部署

docker compose up -d

然后就可以登陆了

http://<IP>:8080
用户名/密码:admin/admin123

登录

主页

使用总结

优点:

  1. 资源占比非常低
  2. 部署简单
  3. 多用户可以拥有私有目录
  4. 界面干净简单
  5. 操作简单易懂
  6. 可以直接展示图片pdf

不足:

  1. 用户权限过于简单,复杂点的场景无法应对
  2. 没有公告栏之类的可用于展示的信息
  3. 无法文件夹下载,只能手动打包后再手动下载
  4. 无法直接展示视频音频文档表格
  5. 无法将文件夹或者文件对外分享,例如设置密码后再进行特定的分享,而不是改全局的权限才能分享

总的来说,是个非常值得推荐的文件服务,场景不太复杂的情况下,多用户文件服务,完全可以胜任。

标签:FileGator,Filegator,filegator,管理器,多用户,handler,Services,config,DIR
From: https://www.cnblogs.com/guangdelw/p/18659350

相关文章

  • 【mac】mac多用户创建与用户添加删除
    mac多用户创建与用户添加删除 在 linux 系统中我们习惯了使用useradd,userdel,usermod 等指令进行用户管理,使用groupadd,groupdel,groupmod等指令进行用户组管理。但是在 macOS 下这些指令是没有的。所以今天分享的主题是在macOS下如何在命令行里进行用户组、用户......
  • nvim番外之将配置的插件管理器更新为lazy
    在很久以前我写过关于nvim配置的文章,里面推荐使用packer作为插件管理器。但是在一年多以前,packer的仓库中出现这么一段文字Thisrepositoryiscurrentlyunmaintained.Forthetimebeing(asofAugust,2023),itisrecommendedtouseoneofthefollowingpluginmanag......
  • 运行 File Brower 文件管理器
    FileBrowser(opensinanewtab) 是一款流行的文件管理器,可以挂载其它应用申请的PVC来进行文件传输和预览等。下面例子是演示如何使用FileBrowser挂载上一节示例的PVC然后提供一个Web文件管理器服务。前提本地已经安装命令行工具 kubectl(opensinanewtab)获......
  • 在线文件管理器显示乱码或无法删除特定目录
    当您使用在线文件管理器浏览服务器上的文件夹时,如果遇到乱码显示或无法删除特定目录的情况,这通常是由于编码问题、权限不足或文件系统损坏等原因引起的。根据您的描述,这里提供详细的排查步骤和解决方案,帮助您快速解决这些问题:编码问题:确认文件编码:乱码显示往往是因为文件或目......
  • 【Windows】 国内安装Scoop包管理器(镜像加速)
    由于国内github访问不通畅,且多数开源软件托管在github,导致scoop体验极差,甚至安装Scoop这一步都无法进行。国内有位作者将scoop主程序托管在gitee,增加分流逻辑处理安装与更新所涉及的资源。链接:https://gitee.com/scoop-installer/scoop安装scoop主程序1.1初次安装(第一次在电......
  • Lockpass(密码管理器) v0.0.14
    Lockpass是一款密码管理工具,是作者参考1password做的,目前功能尚不完善,作者会在使用过程中不断优化。软件采用双密码机制,主密码和25字符的key(软件生成)组合成超强密码。软件有随机密码生成工具。保险库功能可以将不同的密码信息分类保存,支持切换不同的账号。软件特色双密码......
  • Multi Commander(多标签文件管理器) v14.5.0.3054
    MultiCommander中文版是一个多标签文件管理器,是一个标准的Windows资源管理器的替代软件,该最大的特色是带有双面板、并且还可以启用标签页形式浏览,在界面底部还带各种常见的功能按钮。软件功能1、集成多种常用功能的底部按钮面板:第一行的功能包括了刷新、查看、编辑、拷......
  • Django 模型管理器中自定义方法和添加导出功能
    在Django中,模型管理器提供了一种扩展模型行为的方式。您可以重写或添加自定义方法,以满足特定的业务需求。在本文中,我们将探讨如何在模型管理器中自定义方法,并提供一些常见的用例。此外,我们还将介绍如何在管理员界面中添加导出数据为CSV文件的功能。什么是模型管理......
  • with上下文管理器执行顺序
    MyAsyncContextManager()是在asyncwithMyAsyncContextManager()asmanager:语句中创建的对象。它的实例化是在asyncwith语句执行时的第一步,在进入异步上下文之前,具体执行时机如下:实例化MyAsyncContextManager():当Python解析asyncwithMyAsyncContextManager()......
  • 上下文管理器
    异步上下文管理器(asyncwith)和同步上下文管理器(with)的区别主要在于它们的工作方式与事件循环的配合。理解这一点可以帮助你更好地使用它们处理I/O操作,尤其是在异步编程中。以下是两者的主要区别:1.工作方式同步上下文管理器(with):同步上下文管理器用于同步代码块,它会在进......