canape/backend/web/download.go

58 lines
977 B
Go

package web
import (
"image"
"image/jpeg"
"io"
"net/http"
"os"
"path"
"time"
"github.com/nfnt/resize"
)
// Download used for downloading file
var Download = func(srcURL, dest string) error {
if err := createDirectory(dest); err != nil {
return err
}
var httpClient = &http.Client{
Timeout: time.Second * 10,
}
resp, err := httpClient.Get(srcURL)
if err != nil {
return err
}
defer resp.Body.Close()
img, err := resizeImage(resp.Body)
if err != nil {
return err
}
// Create the file
file, err := os.Create(dest)
if err != nil {
return err
}
defer file.Close()
return jpeg.Encode(file, img, nil)
}
// createDirectory creates the destination directory
func createDirectory(dest string) error {
return os.MkdirAll(path.Dir(dest), os.ModePerm)
}
func resizeImage(img io.Reader) (image.Image, error) {
image, _, err := image.Decode(img)
if err != nil {
return nil, err
}
return resize.Resize(300, 0, image, resize.Lanczos3), nil
}