diff --git a/main.go b/main.go index d89ea0f87bebc746e7ff37fc97e7c43fa7b7cdfd..12e29346edccdaafb59c40d9db6f34f9aee4a61d 100644 --- a/main.go +++ b/main.go @@ -1,19 +1,20 @@ package main import ( - "os" - "net/http" - "io" - "path/filepath" - "encoding/json" - "github.com/go-redis/redis" - "fmt" - "encoding/base64" "crypto/rand" - "time" "database/sql" + "encoding/base64" + "encoding/json" + "fmt" + "github.com/go-redis/redis" _ "github.com/lib/pq" "html/template" + "io" + "mime/multipart" + "net/http" + "os" + "path/filepath" + "time" ) func writeBody(reader io.ReadCloser, path string) error { @@ -52,7 +53,7 @@ func generateId() string { return base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(buffer) } -func createImage(config *Config, body io.ReadCloser) (Image, error) { +func createImage(config *Config, body io.ReadCloser, fileHeader *multipart.FileHeader) (Image, error) { id := generateId() path := filepath.Join(config.SourceFolder, id) @@ -67,8 +68,10 @@ func createImage(config *Config, body io.ReadCloser) (Image, error) { } image := Image{ - Id: id, - MimeType: mimeType, + Id: id, + OriginalName: filepath.Base(fileHeader.Filename), + CreatedAt: time.Now(), + MimeType: mimeType, } return image, nil } @@ -131,8 +134,8 @@ func main() { user := parseUser(r) r.ParseMultipartForm(32 << 20) - file, _, err := r.FormFile("file") - image, err := createImage(&config, file) + file, fileheader, err := r.FormFile("file") + image, err := createImage(&config, file, fileheader) if err != nil { returnResult(w, Result{ Id: "", @@ -142,7 +145,7 @@ func main() { return } - _, err = db.Exec("INSERT INTO images (id, owner) VALUES ($1, $2)", image.Id, user.Id) + _, err = db.Exec("INSERT INTO images (id, owner, created_at, original_name, type) VALUES ($1, $2, $3, $4, $5)", image.Id, user.Id, image.CreatedAt, image.OriginalName, image.MimeType) if err != nil { panic(err) } @@ -221,29 +224,29 @@ func main() { type ImageListData struct { User UserInfo - Images []string + Images []Image } - result, err := db.Query("SELECT id FROM images WHERE owner = $1", user.Id) + result, err := db.Query("SELECT id, title, description, created_at, original_name, type FROM images WHERE owner = $1", user.Id) if err != nil { panic(err) } - var images []string + var images []Image for result.Next() { - var id string - err := result.Scan(&id) + var info Image + err := result.Scan(&info.Id, &info.Title, &info.Description, &info.CreatedAt, &info.OriginalName, &info.MimeType) if err != nil { panic(err) } - images = append(images, id) + images = append(images, info) } - tmpl, err := template.New("me_images").ParseFiles("templates/me_images") + template, err := template.New("me_images").ParseFiles("templates/me_images") if err != nil { panic(err) } - err = tmpl.Execute(w, ImageListData{ + err = template.Execute(w, ImageListData{ user, images, }) diff --git a/templates/me_images b/templates/me_images index 53061dd8f8f2ce842fe16037ea47b102208a5ec1..d0bf232aaeb8eb1ca9059c7271dfc0789cb8c2d1 100644 --- a/templates/me_images +++ b/templates/me_images @@ -8,7 +8,10 @@ </p> {{ range .Images }} - <a href="/i/{{ . }}"> - <img src="/i/{{ . }}t" > + <a href="/i/{{ .Id }}"> + <img src="/i/{{ .Id }}t" > + <p>{{ .OriginalName }}</p> + <p>{{ .CreatedAt }}</p> + <p>{{ .MimeType }}</p> </a> {{ end }} \ No newline at end of file diff --git a/types.go b/types.go index ea1f2fec44e3470c7ace23fcc383817d49c8004d..2ea713f939eb5193892cb27f757bfac973f9a7ea 100644 --- a/types.go +++ b/types.go @@ -1,13 +1,18 @@ package main import ( - "os" "encoding/json" + "os" + "time" ) type Image struct { - Id string `json:"id"` - MimeType string `json:"mime_type"` + Id string `json:"id"` + Title string + Description string + CreatedAt time.Time + OriginalName string + MimeType string `json:"mime_type"` } type Result struct { @@ -23,8 +28,8 @@ type Size struct { } const ( - SIZE_FORMAT_COVER = "cover" - SIZE_FORMAT_CONTAIN = "contain" + sizeFormatCover = "cover" + sizeFormatContain = "contain" ) type Quality struct { @@ -73,4 +78,4 @@ func NewConfigFromEnv() Config { config.Database.Url = os.Getenv("IK8R_DATABASE_URL") return config -} \ No newline at end of file +}