Creating subdirectories in fs now works

This commit is contained in:
Frederick F. Kautz IV
2015-01-27 17:47:11 -08:00
parent 25ad24997e
commit 5daa408e2c
4 changed files with 52 additions and 5 deletions

View File

@@ -176,6 +176,13 @@ func (storage *storage) StoreObject(bucket string, key string, data io.Reader) e
// get object path
objectPath := path.Join(storage.root, bucket, key)
objectDir := path.Dir(objectPath)
if _, err := os.Stat(objectDir); os.IsNotExist(err) {
err = os.MkdirAll(objectDir, 0700)
if err != nil {
return mstorage.EmbedError(bucket, key, err)
}
}
// check if object exists
if _, err := os.Stat(objectPath); !os.IsNotExist(err) {

View File

@@ -15,6 +15,7 @@ func APITestSuite(c *C, create func() Storage) {
testObjectOverwriteFails(c, create)
testNonExistantBucketOperations(c, create)
testBucketRecreateFails(c, create)
testPutObjectInSubdir(c, create)
}
func testCreateBucket(c *C, create func() Storage) {
@@ -142,3 +143,16 @@ func testBucketRecreateFails(c *C, create func() Storage) {
err = storage.StoreBucket("string")
c.Assert(err, Not(IsNil))
}
func testPutObjectInSubdir(c *C, create func() Storage) {
storage := create()
err := storage.StoreBucket("bucket")
c.Assert(err, IsNil)
err = storage.StoreObject("bucket", "dir1/dir2/object", bytes.NewBufferString("hello world"))
c.Assert(err, IsNil)
var bytesBuffer bytes.Buffer
length, err := storage.CopyObjectToWriter(&bytesBuffer, "bucket", "dir1/dir2/object")
c.Assert(len(bytesBuffer.Bytes()), Equals, len("hello world"))
c.Assert(int64(len(bytesBuffer.Bytes())), Equals, length)
c.Assert(err, IsNil)
}