|
|
@ -65,7 +65,8 @@ type Object interface { |
|
|
|
// ObjectStorage represents an object storage to handle a bucket and files
|
|
|
|
// ObjectStorage represents an object storage to handle a bucket and files
|
|
|
|
type ObjectStorage interface { |
|
|
|
type ObjectStorage interface { |
|
|
|
Open(path string) (Object, error) |
|
|
|
Open(path string) (Object, error) |
|
|
|
Save(path string, r io.Reader) (int64, error) |
|
|
|
// Save store a object, if size is unknown set -1
|
|
|
|
|
|
|
|
Save(path string, r io.Reader, size int64) (int64, error) |
|
|
|
Stat(path string) (os.FileInfo, error) |
|
|
|
Stat(path string) (os.FileInfo, error) |
|
|
|
Delete(path string) error |
|
|
|
Delete(path string) error |
|
|
|
URL(path, name string) (*url.URL, error) |
|
|
|
URL(path, name string) (*url.URL, error) |
|
|
@ -80,7 +81,13 @@ func Copy(dstStorage ObjectStorage, dstPath string, srcStorage ObjectStorage, sr |
|
|
|
} |
|
|
|
} |
|
|
|
defer f.Close() |
|
|
|
defer f.Close() |
|
|
|
|
|
|
|
|
|
|
|
return dstStorage.Save(dstPath, f) |
|
|
|
size := int64(-1) |
|
|
|
|
|
|
|
fsinfo, err := f.Stat() |
|
|
|
|
|
|
|
if err == nil { |
|
|
|
|
|
|
|
size = fsinfo.Size() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return dstStorage.Save(dstPath, f, size) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// SaveFrom saves data to the ObjectStorage with path p from the callback
|
|
|
|
// SaveFrom saves data to the ObjectStorage with path p from the callback
|
|
|
@ -94,7 +101,7 @@ func SaveFrom(objStorage ObjectStorage, p string, callback func(w io.Writer) err |
|
|
|
} |
|
|
|
} |
|
|
|
}() |
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
_, err := objStorage.Save(p, pr) |
|
|
|
_, err := objStorage.Save(p, pr, -1) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|