This repository has been archived on 2025-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
trantor/upload.go
2012-08-19 02:29:34 +02:00

67 lines
1.2 KiB
Go

package main
import (
"labix.org/v2/mgo"
"os"
"strconv"
//"labix.org/v2/mgo/bson"
"net/http"
)
func storePath(name string) string {
path := "new/" + name
_, err := os.Stat(path)
for i := 0; err == nil; i++ {
path = "new/" + strconv.Itoa(i) + "_" + name
_, err = os.Stat(path)
}
return path
}
func storeFile(r *http.Request) error {
f, header, err := r.FormFile("epub")
if err != nil {
return err
}
defer f.Close()
fw, err := os.Create(storePath(header.Filename))
if err != nil {
return err
}
defer fw.Close()
const size = 1024
var n int = size
buff := make([]byte, size)
for n == size {
n, err = f.Read(buff)
fw.Write(buff)
}
return nil
}
type uploadData struct {
S Status
Msg string
}
func uploadHandler(coll *mgo.Collection) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
var data uploadData
data.S = GetStatus(w, r)
data.S.Upload = true
data.Msg = ""
if r.Method == "POST" {
err := storeFile(r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
data.Msg = "Upload successful."
}
loadTemplate(w, "upload", data)
}
}