s3/local backend: Fix error for overwriting files
This commit is contained in:
parent
1547d3b656
commit
d9c87559b5
2 changed files with 16 additions and 5 deletions
|
@ -171,16 +171,19 @@ func (b *Local) Save(h backend.Handle, p []byte) (err error) {
|
||||||
|
|
||||||
f := filename(b.p, h.Type, h.Name)
|
f := filename(b.p, h.Type, h.Name)
|
||||||
|
|
||||||
// create directories if necessary, ignore errors
|
|
||||||
if h.Type == backend.Data {
|
|
||||||
os.MkdirAll(filepath.Dir(f), backend.Modes.Dir)
|
|
||||||
}
|
|
||||||
|
|
||||||
// test if new path already exists
|
// test if new path already exists
|
||||||
if _, err := os.Stat(f); err == nil {
|
if _, err := os.Stat(f); err == nil {
|
||||||
return fmt.Errorf("Rename(): file %v already exists", f)
|
return fmt.Errorf("Rename(): file %v already exists", f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create directories if necessary, ignore errors
|
||||||
|
if h.Type == backend.Data {
|
||||||
|
err = os.MkdirAll(filepath.Dir(f), backend.Modes.Dir)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err = os.Rename(tmpfile.Name(), f)
|
err = os.Rename(tmpfile.Name(), f)
|
||||||
debug.Log("local.Save", "save %v: rename %v -> %v: %v",
|
debug.Log("local.Save", "save %v: rename %v -> %v: %v",
|
||||||
h, filepath.Base(tmpfile.Name()), filepath.Base(f), err)
|
h, filepath.Base(tmpfile.Name()), filepath.Base(f), err)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package s3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -103,6 +104,13 @@ func (be S3Backend) Save(h backend.Handle, p []byte) (err error) {
|
||||||
|
|
||||||
path := s3path(h.Type, h.Name)
|
path := s3path(h.Type, h.Name)
|
||||||
|
|
||||||
|
// Check key does not already exist
|
||||||
|
_, err = be.client.StatObject(be.bucketname, path)
|
||||||
|
if err == nil {
|
||||||
|
debug.Log("s3.blob.Finalize()", "%v already exists", h)
|
||||||
|
return errors.New("key already exists")
|
||||||
|
}
|
||||||
|
|
||||||
<-be.connChan
|
<-be.connChan
|
||||||
defer func() {
|
defer func() {
|
||||||
be.connChan <- struct{}{}
|
be.connChan <- struct{}{}
|
||||||
|
|
Loading…
Reference in a new issue