image.go 706 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package getter
  2. import (
  3. "fmt"
  4. "io"
  5. "net/http"
  6. "net/url"
  7. "strings"
  8. )
  9. type Image struct {
  10. Blob []byte
  11. Mediatype string
  12. }
  13. func GetImage(urlStr string) (*Image, error) {
  14. if _, err := url.Parse(urlStr); err != nil {
  15. return nil, err
  16. }
  17. response, err := http.Get(urlStr)
  18. if err != nil {
  19. return nil, err
  20. }
  21. defer response.Body.Close()
  22. mediatype, err := getMediatype(response)
  23. if err != nil {
  24. return nil, err
  25. }
  26. if !strings.HasPrefix(mediatype, "image/") {
  27. return nil, fmt.Errorf("Wrong image mediatype")
  28. }
  29. bodyBytes, err := io.ReadAll(response.Body)
  30. if err != nil {
  31. return nil, err
  32. }
  33. image := &Image{
  34. Blob: bodyBytes,
  35. Mediatype: mediatype,
  36. }
  37. return image, nil
  38. }