-
Janne Mareike Koschinski authoredJanne Mareike Koschinski authored
main.go 3.59 KiB
package main
import (
"os"
"net/http"
"io"
"path/filepath"
"encoding/json"
"github.com/go-redis/redis"
"fmt"
"encoding/base64"
"crypto/rand"
)
func writeBody(reader io.ReadCloser, path string) error {
out, err := os.Create(path)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, reader)
if err != nil {
return err
}
return out.Close()
}
func detectMimeType(path string) (string, error) {
file, err := os.Open(path)
if err != nil {
return "", err
}
buffer := make([]byte, 512)
_, err = file.Read(buffer)
if err != nil {
return "", err
}
return http.DetectContentType(buffer), nil
}
func generateId() string {
buffer := make([]byte, 4)
rand.Read(buffer)
return base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(buffer)
}
func createImage(config *Config, body io.ReadCloser) (Image, error) {
id := generateId()
path := filepath.Join(config.SourceFolder, id)
err := writeBody(body, path)
if err != nil {
return Image{}, err
}
mimeType, err := detectMimeType(path)
if err != nil {
return Image{}, err
}
image := Image{
Id: id,
MimeType: mimeType,
}
return image, nil
}