mirror of
https://github.com/restic/rest-server.git
synced 2025-10-19 15:43:21 +00:00
Use temporary folder for temporary files
This commit is contained in:
parent
67b66134fc
commit
fe8ce643aa
1 changed files with 13 additions and 7 deletions
20
handlers.go
20
handlers.go
|
@ -163,9 +163,9 @@ func GetBlob(c *Context) http.HandlerFunc {
|
|||
http.Error(w, "404 not found", 404)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
http.ServeContent(w, r, "", time.Unix(0, 0), file)
|
||||
file.Close()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -176,18 +176,14 @@ func SaveBlob(c *Context) http.HandlerFunc {
|
|||
dir := vars[1]
|
||||
name := vars[2]
|
||||
|
||||
if dir == "data" {
|
||||
os.MkdirAll(filepath.Join(c.path, dir, name[:2]), 0700)
|
||||
name = filepath.Join(name[:2], name)
|
||||
}
|
||||
path := filepath.Join(c.path, dir, name)
|
||||
tmp := filepath.Join(c.path, "tmp", name)
|
||||
|
||||
tmp := path + ".tmp"
|
||||
tf, err := fs.OpenFile(tmp, os.O_CREATE|os.O_WRONLY, 0600)
|
||||
if err != nil {
|
||||
http.Error(w, "500 internal server error", 500)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := io.Copy(tf, r.Body); err != nil {
|
||||
http.Error(w, "400 bad request", 400)
|
||||
tf.Close()
|
||||
|
@ -196,9 +192,19 @@ func SaveBlob(c *Context) http.HandlerFunc {
|
|||
}
|
||||
if err := tf.Close(); err != nil {
|
||||
http.Error(w, "500 internal server error", 500)
|
||||
os.Remove(tmp)
|
||||
return
|
||||
}
|
||||
|
||||
if dir == "data" {
|
||||
os.MkdirAll(filepath.Join(c.path, dir, name[:2]), 0700)
|
||||
name = filepath.Join(name[:2], name)
|
||||
}
|
||||
path := filepath.Join(c.path, dir, name)
|
||||
|
||||
if err := os.Rename(tmp, path); err != nil {
|
||||
http.Error(w, "500 internal server error", 500)
|
||||
os.Remove(tmp)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue