mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 02:26:12 +00:00
59 lines
944 B
Go
59 lines
944 B
Go
package bpmlib
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
func downloadFile(barText, u, filepath string, perm os.FileMode) error {
|
|
if strings.HasSuffix(filepath, "/") {
|
|
return fmt.Errorf("Filepath must not end in '/'")
|
|
}
|
|
|
|
req, err := http.NewRequest("GET", u, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Create parent directories
|
|
err = os.MkdirAll(path.Dir(filepath), 0755)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Create file
|
|
file, err := os.Create(filepath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
// Create progress bar
|
|
bar := createProgressBar(resp.ContentLength, barText, false)
|
|
defer bar.Close()
|
|
|
|
// Copy data
|
|
_, err = io.Copy(io.MultiWriter(file, bar), resp.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Set file permissions
|
|
err = file.Chmod(perm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|