51 lines
984 B
Go
51 lines
984 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"github.com/schollz/progressbar/v3"
|
|
"log"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func main() {
|
|
config := Config{
|
|
Hostname: os.Getenv("GOKAPI_HOSTNAME"),
|
|
APIKey: os.Getenv("GOKAPI_API_KEY"),
|
|
ParallelChunks: 4,
|
|
ChunkSize: 1024 * 100,
|
|
}
|
|
flag.Parse()
|
|
|
|
hostUrl, err := url.Parse(config.Hostname)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
client := newGokapiClient(hostUrl, config.APIKey)
|
|
cnkr := newChunker(client, config.ParallelChunks, config.ChunkSize)
|
|
|
|
for _, file := range flag.Args() {
|
|
_, err := cnkr.UploadFile(ctx, file, progressBarReport(file))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func progressBarReport(filename string) func(cr ChunkReport) {
|
|
var pr *progressbar.ProgressBar
|
|
|
|
return func(cr ChunkReport) {
|
|
if cr.UploadedChunks == 0 && pr == nil {
|
|
pr = progressbar.DefaultBytes(cr.TotalSize, filepath.Base(filename))
|
|
}
|
|
pr.Set(int(cr.UploadedBytes))
|
|
}
|
|
}
|