Fix upload problems
This commit is contained in:
parent
61764d51b3
commit
bf0480868d
1 changed files with 45 additions and 34 deletions
79
upload.go
79
upload.go
|
@ -18,51 +18,62 @@ func InitUpload() {
|
||||||
var uploadChannel chan uploadRequest
|
var uploadChannel chan uploadRequest
|
||||||
|
|
||||||
type uploadRequest struct {
|
type uploadRequest struct {
|
||||||
epubs []*multipart.FileHeader
|
file multipart.File
|
||||||
|
filename string
|
||||||
}
|
}
|
||||||
|
|
||||||
func uploadWorker() {
|
func uploadWorker() {
|
||||||
for req := range uploadChannel {
|
for req := range uploadChannel {
|
||||||
for _, f := range req.epubs {
|
processFile(req)
|
||||||
file, err := f.Open()
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Can not open uploaded file", f.Filename, ":", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
epub, err := openMultipartEpub(file)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Not valid epub uploaded file", f.Filename, ":", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
defer epub.Close()
|
|
||||||
|
|
||||||
book := parseFile(epub)
|
|
||||||
title, _ := book["title"].(string)
|
|
||||||
file.Seek(0, 0)
|
|
||||||
id, err := StoreNewFile(title+".epub", file)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error storing book (", title, "):", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
book["file"] = id
|
|
||||||
db.InsertBook(book)
|
|
||||||
log.Println("File uploaded:", f.Filename)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func processFile(req uploadRequest) {
|
||||||
|
defer req.file.Close()
|
||||||
|
|
||||||
|
epub, err := openMultipartEpub(req.file)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Not valid epub uploaded req.file", req.filename, ":", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer epub.Close()
|
||||||
|
|
||||||
|
book := parseFile(epub)
|
||||||
|
title, _ := book["title"].(string)
|
||||||
|
req.file.Seek(0, 0)
|
||||||
|
id, err := StoreNewFile(title+".epub", req.file)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error storing book (", title, "):", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
book["req.file"] = id
|
||||||
|
db.InsertBook(book)
|
||||||
|
log.Println("File uploaded:", req.filename)
|
||||||
|
}
|
||||||
|
|
||||||
func uploadPostHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
|
func uploadPostHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
|
||||||
|
problem := false
|
||||||
|
|
||||||
r.ParseMultipartForm(20000000)
|
r.ParseMultipartForm(20000000)
|
||||||
filesForm := r.MultipartForm.File["epub"]
|
filesForm := r.MultipartForm.File["epub"]
|
||||||
uploadChannel <- uploadRequest{filesForm}
|
for _, f := range filesForm {
|
||||||
|
file, err := f.Open()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Can not open uploaded file", f.Filename, ":", err)
|
||||||
|
sess.Notify("Upload problem!", "There was a problem with book "+f.Filename, "error")
|
||||||
|
problem = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
uploadChannel <- uploadRequest{file, f.Filename}
|
||||||
|
}
|
||||||
|
|
||||||
if len(filesForm) > 0 {
|
if !problem {
|
||||||
sess.Notify("Upload successful!", "Thank you for your contribution", "success")
|
if len(filesForm) > 0 {
|
||||||
} else {
|
sess.Notify("Upload successful!", "Thank you for your contribution", "success")
|
||||||
sess.Notify("Upload problem!", "No books where uploaded.", "error")
|
} else {
|
||||||
|
sess.Notify("Upload problem!", "No books where uploaded.", "error")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
uploadHandler(w, r, sess)
|
uploadHandler(w, r, sess)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue