Select Git revision
page_upload.go 3.93 KiB
package main
import (
"crypto/rand"
"encoding/base64"
"encoding/json"
"fmt"
"git.kuschku.de/justjanne/imghost/shared"
"github.com/hibiken/asynq"
"io"
"mime/multipart"
"net/http"
"os"
"path/filepath"
"time"
)
type UploadData struct {
BaseUrl string
User shared.UserInfo
}
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, error) {
buffer := make([]byte, 4)
if _, err := rand.Read(buffer); err != nil {
return "", err
}
return base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(buffer), nil
}
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 createImage(config *shared.Config, body io.ReadCloser, fileHeader *multipart.FileHeader) (shared.Image, error) {
id, err := generateId()
if err != nil {
return shared.Image{}, err
}
path := filepath.Join(config.SourceFolder, id)
if err := writeBody(body, path); err != nil {
return shared.Image{}, err
}