Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Self-hosted files sharing application, easy to setup, easy to use

License

NotificationsYou must be signed in to change notification settings

axeloz/filesharing

Repository files navigation

FILES SHARING VERSION 2 JUST RELEASED

Description

This PHP application based on Laravel 10.9 allows to share files like Wetransfer. You may install iton your own server. Itdoes not require any database system, it works with JSON files into the storage folder. It ismultilingual and comes with english, french, german and korean translations for now. You're welcome to help translating the app.

This application provides two links per bundle :

Each of these links comes with an authorization code. This code is the same for the preview and the download links.

The application also comes with a Laravel Artisan command as a background task who will physically remove expired bundle files of the storage disk. This command is configured to run every five minutes among the Laravel scheduled commands.

Features

  • uploader access permission: IP based or login/password
  • bundle's settings: title, description, expiration date, number max of downloads, password...
  • upload one or more files via drag and drop or via browsing your filesystem
  • ability to keep adding files to the bundle days later
  • sharing link with bundle content preview
  • download rate limiter
  • ability to download the entire bundle as ZIP archive (password protected when applicable)
  • direct download link (doesn't preview the bundle content)
  • garbage collector which removes the expired bundles as a background task
  • multilingual (EN, FR, DE and KR)
  • easy installation,no database required
  • secured by tokens, authentication codes and non-publicly-accessible files

Demo

Online Demo

You may visit myOnline Demo

Video Demo

A video demo is availableon Youtube

Screenshot

demo image

Requirements

Basically, nothing more than Laravel itself:

  • PHP >= 8.1
  • Ctype PHP Extension
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

Plus:

  • JSON PHP Extension (included after PHP 5.2+)
  • ZipArchive PHP Extension (included after PHP 5.3+)
  • SQLite

The application also uses:

Installation

Docker

You may now install FileSharing via Docker.Seehttps://hub.docker.com/r/axeloz/filesharing

docker run -d \-p 8080:80 \-v <local_path>:/app/storage/content \--name filesharing \-e APP_NAME="FileSharing" \-e APP_URL="<your_url>" \-e ASSET_URL="<your_asset_url>" \-e UPLOAD_MAX_FILESIZE="1G" \-e APP_TIMEZONE="Europe/Paris" \-e UPLOAD_PREVENT_DUPLICATES=true \-e HASH_MAX_FILESIZE="1G" \-e UPLOAD_MAX_FILES=100 \-e LIMIT_DOWNLOAD_RATE="100K" \axeloz/filesharing:latest
  • use the-v option to bind your local storage to the docker instance (persisting data)
  • adapt the-p option to listen to the port you need
  • you may pass env variables with the-e option
  • you can use a reverse proxy for SSL termination (example: nginx)

Simple config for Nginx:

server {server_name filesharing.box.webinno.fr;charset utf-8;location / {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-Proto $scheme;proxy_set_header   X-Scheme $scheme;proxy_pass http://localhost:8080;}listen [::]:443 ssl http2;listen 443 ssl http2;ssl_certificate [...]ssl_certificate_key [...]}

You can also use in docker compose with the following template:

version:'3'services:app:image:axeloz/filesharing:latestenvironment:UPLOAD_MAX_FILESIZE:"1G"UPLOAD_MAX_FILES:"100"UPLOAD_LIMIT_IPS:"127.0.0.1"UPLOAD_PREVENT_DUPLICATES:trueHASH_MAX_FILESIZE:"1G"LIMIT_DOWNLOAD_RATE:"1M"volumes:      -files_v:/app/storage/contentports:      -8080:80volumes:files_v:driver:local

Standalone

  • configure your domain name. For example: files.yourdomain.com
  • clone the repo or download the sources into the webroot folder
  • configure your webserver to point your domain name to the./public folder
  • runcomposer install
  • runyarn --production (ornpm install --production)
  • runyarn build (ornpm run build)
  • make sure that the PHP process has write permission on the./storage folder
  • generate the Laravel KEY:php artisan key:generate
  • runcp .env.example .env and edit.env to fit your needs
  • (optional) you may create your first userphp artisan fs:user:create
  • start the Laravel scheduler (it will delete expired bundles of the storage). For example* * * * * /usr/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
  • (optional) to purge bundles manually, runphp artisan fs:bundle:purge

Use your browser to navigate to your domain name (example: files.yourdomain.com) andthat's it.

Configuration

In order to configure your application, copy the .env.example file into .env. Then edit the .env file.

Configuration Description
APP_NAMEthe title of the application
APP_ENV    change this toproduction when in production (local otherwise)
APP_DEBUGchange this tofalse when in production (true otherwise)
APP_TIMEZONEchange this to your current timezone
APP_LOCALE change this to "fr", "en", "de" or "kr"
UPLOAD_PREVENT_DUPLICATESShould the app block duplicate files (true / false)
HASH_MAX_FILESIZEmax size for hashing file to check for duplicate files. If files are bigger than limit, they will not be hashed. Find the best value for better cpu / memory consumption
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 andmemory_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.
LIMIT_DOWNLOAD_RATE(optional) if set, limit the download rate. For instance, you may setLIMIT_DOWNLOAD_RATE=100K to limit download rate to 100Ko/s

Authentication

You may provide a list of IPs to limit access to the upload feature.
Or you can create users with login/password credentials.
You can alsomix the two methods.

Warning: if your leave theUPLOAD_LIMIT_IPS empty and you don't create users, the upload will be publicly accessible

Known issues

If you are using Nginx, you might be required to do additional setup in order to increase the upload max size. Check the Nginx's documentation forclient_max_body_size.

Development

If your want to modify the sources, you can use the Laravel Mix features:

  • configure your domain name. For example: files.yourdomain.com
  • clone the repo or download the sources into the webroot folder
  • configure your webserver to point your domain name to the public/ folder
  • run acomposer install
  • run ayarn install
  • run ayarn dev in order to recompile the assets when changed

Roadmap / Ideas / Improvements

There are many ideas to come. You are welcome toparticipate.

  • add PHP unit testing
  • more testing on heavy files
  • background process for creating Zips asynchronously after completion of the bundle
  • invitation to external users to upload file into existing bundle
  • customizable / white labeling (logo, name, terms of service, footer ...)

Licence

GPLv3

PermissionsConditionsLimitations
Commercial useDisclose sourceLiability
DistributionLicense and copyright noticeWarranty
ModificationSame license
Patent useState changes
Private use 

https://choosealicense.com/licenses/gpl-3.0/

Welcome on board

If you are willing toparticipate or if you just want to talk with me :axel@mabox.eu

Powered by

About

Self-hosted files sharing application, easy to setup, easy to use

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

    Contributors6

    Languages


    [8]ページ先頭

    ©2009-2025 Movatter.jp