https://github.com/guilhermerodrigues680/gouploadserver
O GO Upload Server foi escrito para ser agil e permitir a inicialização rápida de um servidor de arquivos a partir de um diretório.
https://github.com/guilhermerodrigues680/gouploadserver
golang html server static upload
Last synced: 5 months ago
JSON representation
O GO Upload Server foi escrito para ser agil e permitir a inicialização rápida de um servidor de arquivos a partir de um diretório.
- Host: GitHub
- URL: https://github.com/guilhermerodrigues680/gouploadserver
- Owner: guilhermerodrigues680
- License: mit
- Created: 2021-04-15T17:23:26.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-10-24T19:02:18.000Z (over 3 years ago)
- Last Synced: 2024-06-20T12:44:35.465Z (about 2 years ago)
- Topics: golang, html, server, static, upload
- Language: Go
- Homepage:
- Size: 533 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# GO Upload Server - Command Line Tool
[](https://pkg.go.dev/github.com/guilhermerodrigues680/gouploadserver)
[](./LICENSE)
O **GO Upload Server** foi escrito para ser agil e permitir a inicialização rápida de um servidor de arquivos a partir de um diretório.
Ele faz leitura e escrita usando buffers o que faz ele consumir pouquissima memoria (small memory footprint).
*Nota: Embora **GO Upload Server** seja uma ótima maneira de servir facilmente arquivos de um diretório, ele não deve ser usado em um ambiente de produção pois ele não implementa verificações de segurança.*
## Motivações para o projeto
Servidores da web amplamente usados, como NGINX, Apache e Tomcat, são excelentes porém consomem muito tempo para serem configurados.
O GO possui o package `http` com a `func FileServer` que inicia um servidor de arquivos a partir de um diretório, porém o `FileServer` não permite customizações. Ex: Alteração no template HTML padrão e CSS personalizado.
Então para ter um servidor personalizável, com novas funcionalidades e agil este projeto foi desenvolvido como uma Command Line Tool.
## Features
- Servidor de arquivos.
- Servidor websites pois implementa MIME types.
- Possui o modo Servidor de Single Page Aplications (SPA) que implementa o catch-all fallback para `/index.html`.
- Baixíssimo consumo de memória.
- Alteração fácil da porta do servidor via flag
- Navegador de arquivos com opção para upload de arquivo no diretório navegado.
- Implementa o renomeio dos arquivos enviados para não sobreescrever os arquivos originais do diretório (pode ser desativado via flag).
- Usa o Go templates internamente permitindo a customização do navegador de arquivos.
## Instalação
### Instalação com Go (requer v1.16+).
```console
go get -u guilhermerodrigues680/gouploadserver
```
### Instalação com binários pré-compilados (qualquer sistema operacional)
Para instalar a versão mais recente do gouploadserver a partir de binários pré-compilados, siga estas instruções:
1. Baixe manualmente em [github.com/guilhermerodrigues680/gouploadserver/releases](https://github.com/guilhermerodrigues680/gouploadserver/releases) o arquivo zip correspondente ao seu sistema operacional e arquitetura do computador (`gouploadserver--.zip`), ou baixe o arquivo usando comandos como os seguintes:
```sh
$ PR_REL="https://github.com/guilhermerodrigues680/gouploadserver/releases"
$ curl -LO $PR_REL/download/v1.0.0/gouploadserver-v1.0.0-linux-amd64.zip
```
2. Descompacte o arquivo em `$HOME/.local` ou em um diretório de sua escolha. Por exemplo:
```sh
$ unzip gouploadserver-v1.0.0-linux-amd64.zip -d $HOME/.local
```
3. Atualize os seu `PATH` para incluir o caminho para o executável gouploadserver. Por exemplo:
```sh
$ export PATH="$PATH:$HOME/.local/bin"
```
## Como usar
Start do **gouploadserver** com as configurações padrão:
```console
$ gouploadserver
```
É possivel passar flags para o **gouploadserver**:
```sh
# Usage: gouploadserver [options] [path]
$ gouploadserver --port 8082 ./folder
```
### Command-Line Options
```console
Usage: gouploadserver [options] [path]
[path] defaults to ./
Options are:
--dev Use development settings (default false)
--keep-upload-filename Keep original upload file name: Use 'filename.ext' instead of 'filename<-random>.ext' (default false)
--port Port to use (default 8000)
--spa Return to all files not found /index.html (default false)
--version Show version number and quit (default false)
--watch-mem Watch memory usage (default false)
--help Display usage information (this message)
-h Display usage information (this message) (shorthand)
```
## Configuração do projeto para desenvolvimento
**\* Requer o GO v1.16+**
```sh
$ git clone https://github.com/guilhermerodrigues680/gouploadserver.git
```
O Makefile possui intruções para compilar o projeto:
```sh
# make build compila para diversas plataformas
make build
# output bin/gouploadserver--
```
```sh
# make cross compila somente para plataforma atual
make cross
# output bin/gouploadserver
```
### Instalação a partir do código do projeto
```sh
make install
# ou
go install
# output: $GOPATH/bin/gouploadserver
```
## Versionamento
Este projeto segue o [Versionamento Semântico 2.0.0](https://semver.org/lang/pt-BR/spec/v2.0.0.html).
## Licença
Este projeto está licenciado sob os termos da licença MIT. Veja [LICENSE](./LICENSE).
## Anotações
Anotações
- https://www.digitalocean.com/community/tutorials/how-to-build-and-install-go-programs-pt
- https://golang.org/doc/tutorial/compile-install
- https://golang.org/ref/mod#go-install
- https://makefiletutorial.com/
```sh
➜ cmd go list -f '{{.Target}}'
/Users/guilherme/go/bin/cmd
```
```sh
go test -v -benchmem -bench=.
```
date -u +"%Y%m%d%H%M%S"
TZ=UTC date +"%Y%m%d%H%M%S"
TZ=GMT date +"%Y%m%d%H%M%S"
https://pkg.go.dev/github.com/guilhermerodrigues680/gouploadserver
git tag v0.0.0-alpha.0-$(date -u +"%Y%m%d%H%M%S")