Skip to content
Switch branches/tags
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

File Proxy Application

A Laravel-based file proxy application. Ready to go.

Build Status StyleCI


File Proxy provides file sharing with a bit more management. You can share files with one-time links, x-time links, time-based links and so on.

Every download gets checked and access statistics will be stored.

You can upload files for sharing or you can provide an url to be shared.

For every file you want to share you can create several aliases with an access policy.

For example:

You have file pricelist.pdf and you want to share with your clients. But every client should get his own, so you can check the download history for each. So you create one alias for the pricelist.pdf for each of your clients: client1-pricelist.pdf, client2-pricelist-2017.pdf and so on. Every alias can be configured individually - in the example maybe a time-limited and hit-limited download. So each client can only download this file 10 times until the end of this year.


You can install by composer

composer create-project --prefer-dist ipunkt/fileproxy your-file-proxy-app

or simply download from github.

For building assets you need node/yarn.


After installing files locally you should configure your application. We have several running modes and conditional behaviour, so read out configuration chapter carefully.


We recommend running a queue - not in sync. Especially for remote file support it can be a headache when you do remote file fetching in sync.

The file proxy app is a microservice with an optional web ui. We recommend running this service within your infrastructure and providing authorization and authentication yourself. Maybe a nginx serving these files can manage a auth basic check or you use your own single sign on solution providing access to this service as pass-through.

We provide some example configurations in the examples folder.


The whole application is powered by configuration values in config/fileproxy.php. The following section clears the meaning of each value.



The file proxy can run in 3 different modes. The running mode can be configured by environment.

default makes file proxy service available through web ui and api endpoints.

ui activates only the web ui. No api routes available.

api activates only the api endpoints.


Please do not change the mode for a running service. We always check the existing routes on creating aliases - so they do not collide with existing routes. This check won't be done after re-activating previously disabled routes.

Default: default



It is possible to cache all remote files. This helps you playing a real proxy that caches all served files. If you do not cache any remote files locally than file proxy will pass through the remote url.

We recommend caching of remote files.

Default: false



All settings depending on the web frontend.


You can enable or disable the ability to upload files via web frontend. This allows everybody to upload files to your file proxy application.

Default: false



You can enable or disable the ability to create remote files via web frontend. This allows everybody to create remote files to your file proxy application.

Default: false



All settings depending on the api endpoint.


The secret token is for security reason. Api calls can be secured by this value. If it is set you have to add a header X-FILEPROXY-TOKEN to each api request.

When it is null no header validation will be executed.

Default: null

Environment variable: FILEPROXY_API_SECRET_TOKEN


The secret token will be checked by a header named X-FILEPROXY-TOKEN by default. You can override this concrete header name if you want.


Environment variable: FILEPROXY_API_TOKEN_NAME


All commands for running the business functions are unit tested. You can run composer test to run our test suite.

Local Development

We (ipunkt) provide a package called rancherize for hosting our web stacks in a rancher environment with various docker images. For local development you can use rancherize command in the following way.

You need locally docker daemon installed.

Copy following content in a rancherize.json file in your project root:

    "blueprints": {
        "webserver": "Rancherize\\Blueprint\\Webserver\\WebserverBlueprint"
    "blueprint": "webserver",
    "default": {
        "rancher": {
            "account": "ipunkt"
        "docker": {
            "account": "default",
            "repository": "repo\/name",
            "version-prefix": "",
            "base-image": "busybox"
        "nginx-config": "",
        "service-name": "Fileproxy"
    "environments": {
        "local": {
            "debug-image": true,
            "sync-user-into-container": true,
            "expose-port": 18129,
            "use-app-container": false,
            "mount-workdir": true,
            "add-redis": true,
            "add-database": true,
            "database": {
                "pma": {
                    "enable": true,
                    "require-login": false,
                    "expose": true
                "pma-port": 9755
            "php": "7.0",
            "queues": [
                    "connection": "redis",
                    "name": "default"
            "environment": {
                "APP_ENV": "local",
                "APP_DEBUG": true,
                "APP_KEY": "base64:jid3KQRva+vTtpU2mK6hvWxrLI6vmOmIwn\/AEAH4ua0=",
                "QUEUE_DRIVER": "redis"

Then hit vendor/bin/rancherize start local and wait until the command line shows you the following output:

Service PMA was exposed to the ports 9755
Link for convenience: http://localhost:9755
Service Fileproxy was exposed to the ports 18129
Link for convenience: http://localhost:18129

We provide a local phpMyAdmin and the web application frontend.


Build all assets with the command

yarn run dev


yarn run prod

for production output.

We ship already-built assets in this repository. So you do not need to build your own.