Files
bpm/src/bpmlib/net.go
T
2025-10-26 20:06:55 +02:00

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
}