X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=src%2Fuploader%2Fmain.go;h=ed39c3d8ada682bdd511d124186ca9d6527a9c97;hb=32e6b9b9094e2a4fbd82c9eb61d181afe532c3e2;hp=74be1fe75c098b090e780996e964c1957e6e6e19;hpb=3034d90441b9874b3b8d4b07753bde0d80e438fb;p=uploader.git diff --git a/src/uploader/main.go b/src/uploader/main.go index 74be1fe..ed39c3d 100644 --- a/src/uploader/main.go +++ b/src/uploader/main.go @@ -57,29 +57,35 @@ func upload(w http.ResponseWriter, r *http.Request) { log.Println(r.RemoteAddr, "non file form field") return } + h, err := blake2s.New256(nil) + if err != nil { + panic(err) + } fn := time.Now().Format(time.RFC3339Nano) - fd, err := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE, 0600) + fd, err := os.OpenFile(fn+".part", os.O_WRONLY|os.O_CREATE, 0600) if err != nil { log.Println(r.RemoteAddr, fn, p.FileName(), err) return } - defer fd.Close() - h, err := blake2s.New256(nil) - if err != nil { - panic(err) - } fdBuf := bufio.NewWriterSize(fd, WriteBufSize) mw := io.MultiWriter(fdBuf, h) n, err := io.Copy(mw, p) if err != nil { log.Println(r.RemoteAddr, fn, p.FileName(), err) + fd.Close() return } if err = fdBuf.Flush(); err != nil { log.Println(r.RemoteAddr, fn, p.FileName(), err) + fd.Close() return } + fd.Close() sum := hex.EncodeToString(h.Sum(nil)) + if err = os.Rename(fn+".part", fn); err != nil { + log.Println(r.RemoteAddr, fn, p.FileName(), n, sum, err) + return + } fmt.Fprintf(w, "bytes: %d\nBLAKE2s: %s\n", n, sum) log.Println(r.RemoteAddr, fn, p.FileName(), n, sum) }