mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 10:36:12 +00:00
62 lines
921 B
Go
62 lines
921 B
Go
package bpmlib
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
func retrieveUrlData(u string) ([]byte, error) {
|
|
resp, err := http.Get(u)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Load data into byte buffer
|
|
buffer, err := io.ReadAll(resp.Body)
|
|
|
|
return buffer, nil
|
|
}
|
|
|
|
func downloadFile(u, filepath string, perm os.FileMode) error {
|
|
if strings.HasSuffix(filepath, "/") {
|
|
return fmt.Errorf("Filepath must not end in '/'")
|
|
}
|
|
|
|
data, err := retrieveUrlData(u)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 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()
|
|
|
|
// Copy data
|
|
_, err = file.Write(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Set file permissions
|
|
err = file.Chmod(perm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|