GithubHelp home page GithubHelp logo

sexnine / downcat Goto Github PK

View Code? Open in Web Editor NEW
30.0 3.0 1.0 1.4 MB

A simple cross-platform remote file management tool to upload and download files over HTTP/S - Alternative to Updog

License: MIT License

Rust 42.25% Shell 3.05% HTML 0.95% JavaScript 2.26% Vue 39.53% CSS 5.82% TypeScript 6.13%
actix actix-web rust self-hosted tailwindcss vue vuejs vite

downcat's Introduction

Downcat

A simple cross-platform remote file management tool to upload and download files over HTTP/S

๐Ÿ“œ License โœจ Features ๐ŸŽ‰ Install ๐ŸŽ Releases

Built with Rust Built with Vue Built with Typescript Built with TailwindCSS

โœจ Features

โšก Fast - Quick startup, performant API

โœจ Easy to install - No dependencies*, just one command

๐Ÿ—‚ Upload and download files easily - Using HTTP/S with a sexy web UI

๐ŸŒˆ Cross platform - Windows, Linux and macOS support

*Except for unzip to extract the executable from the archive

๐ŸŽ‰ Install

Automated install (Linux only)

โš  You should not run scripts off the internet without checking them first. You can view the install script here.

You can run an automated install of downcat using the command below. It is highly recommended you run it as root to avoid any permissions-related problems.

curl -sSL https://raw.githubusercontent.com/sexnine/downcat/main/install/downcat_linux.sh | sudo bash

Manual install

  1. Download the latest binary from the releases tab
  2. Unzip the file
  3. Place the executable into your path
  4. Make it executable
  5. Run with downcat

Build it yourself

See ๐Ÿ— Building and other info under โš™ Development and follow steps 3-5 just above.

๐Ÿค” Usage

Run downcat to serve your current directory and then open the link in your browser

~$ downcat
๐Ÿˆ Starting downcat...

โœ… Downcat v0.3.2 running!
โœจ Listening on http://192.168.0.23:3030/

See extra options by viewing the help with downcat -h or downcat --help

You can update downcat to the latest available version using downcat update

Downcat is not meant to be used as a web server. It is meant to be used as a quick and easy file management utility for when you quickly need to up/download a file from a server.

๐Ÿ’Ž All options

Argument Description Default Value
-h, --help Shows help message
-V, --version Shows version
--disable-update-check Disables update check on startup Check for updates
-p, --port <port> Port to listen on 3030
--ssl Enables SSL (Recommended) Off
-P, --password <password> Sets a password for accessing downcat and the APIs (Recommended).
Will need to reauthenticate when restarting downcat, even when using the same password.
None
-b, --bind <host> The IP to listen on Local IP (or 0.0.0.0 if couldn't get local IP)

๐Ÿ›  Development

๐Ÿ“œ Prerequisites NodeJS & NPM Rust & Cargo
  • Clone the repo git clone https://github.com/sexnine/downcat.git
  • Go into the project's directory cd downcat/

โš™ Installing Dependencies

  • Go into the frontend directory cd frontend/
  • Install NPM dependencies with npm i
  • Rust dependencies will automatically install when building or running the project with cargo build & cargo run respectively.

โ–ถ Running

Frontend

  • Go into the frontend directory cd frontend/
  • Run the dev server with npm run dev. The dev server supports hot reloading.
  • Modify the API endpoint in .env.development if you need to.

Note: While developing, the frontend and backend should be run separately. When building a release version, the frontend's files will be embedded into the rust binary.

Backend

  • Simply run with cargo run in the project root.

๐Ÿ— Building

  1. Build the frontend
    1. Go into the frontend directory cd frontend/
    2. Install dependencies if you haven't already with npm i
    3. Build the frontend with npm run build
  2. Build using cargo build --release

๐Ÿ›ฃ Roadmap

  • Retrieve Files and Folders v0.1.0
    • Get metadata v0.1.0
    • Sort file list v0.1.0
    • Search file list v0.3.2
    • Enhanced File Icons
    • Download multiple files
    • Directory History v0.1.0
  • Uploading Files v0.3.0
    • Uploading multiple files v0.3.2
    • Uploading Folders
  • Managing Files/Folders
    • Renaming
    • Deleting
    • Moving
    • Copying
  • SSL v0.2.0
    • Optionally enable SSL using --ssl flag
  • Password Authentication v0.1.0
  • Updater v0.2.0
    • Checks for updates v0.2.0
    • downcat update to perform a self-update v0.2.0
  • Cross Platform support
    • Windows
    • Linux
    • MacOS v0.3.1
  • Allow downcat to access any directory
    • With the --any flag, downcat will be able to access any directory or files it has permissions to

โค Acknowledgements

  • @sc0tfree for the original inspiration for this project (updog)
  • @jethr0-1 (jethro#1547 on Discord) for making a Linux install script for downcat

Made with ๐Ÿ’– by sexnine

downcat's People

Contributors

sexnine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

aryabp

downcat's Issues

Unable to download more than 6 files at once.

Unable to download more than 6 files at once, most likely due to not being enough threads, makes all other requests unresponsive which makes the app feel very slow and sometimes unable to navigate directories while downloading many files at once.

Possible solutions might include:

  • Adding a download queue on the frontend.
  • Leaving at least 1 thread free from uploading and downloading so the backend is still responsive
  • Creating new threads for more downloads/uploads

Loads whole file into memory while uploading to backend

Especially when uploading large files on memory-limited systems, the backend will try allocating a lot of memory for the file and can panic if there is not enough memory, causing the upload to be incomplete and downcat to crash.

For some reason, the file's data is not being freed from memory until the whole file has been written to disk.

Possible solutions for this issue:

  • Freeing memory while parts of the file is written
  • Limiting the request so only a certain amount can be in memory at one time.

Unfortunately, I've tried to implement these solutions but I'm too dumb to solve them :)

Downcat Missing libssl.so.1.1

When trying to run after using automatic install, it give me the error of
downcat: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
which installing libssl-dev or openssl does not fix.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.