Khon Lieu
Khon Lieu

Reputation: 4365

How to clone objects in Amazon S3 using RestS3Service

so i'm trying to clone objects in a folder on my S3 (Amazon S3) account. But i was wondering if there a way to do it without having to write the file to my local system first, then uploading that file back up to S3?

eventually i want it to be fully recursive cloning folders and objects in a given bucket, but for now i'm stuck on getting it to clone efficiently.

say the bucket path is images.example.com/products/prodSku and in that prodSku folder i have a bunch of images i want to copy to a new folder

here's what i have so far.

(note: this is written in groovy, but if you know java, it's the same thing)

try{

    def s3os = restService.listObjects(bucket_name, sourcePrefix, null)
    def s3o
    for(def i in s3os){
        s3o = get(bucket_name, i.key)
        // i want to be able to do something like this, just putting the input stream
        // back into s3. but i can't. from what i know now, i have to write the
        // dataInputStream into a file locally, then use that file to create a new S3Object
        // which is placed as the second argument in the putObject method
        restService.putObject(destinationBucketName, s3o.dataInputStream)
    }
}catch(S3ServiceException e)
{

    println e
}

Sorry the formatting is all messed up, first time posting a message.

but any help would be greatly appreciated!

Thanks!

Upvotes: 0

Views: 1052

Answers (2)

Khon Lieu
Khon Lieu

Reputation: 4365

so i ended up figuring out how to do clone the asset in s3 using JetS3t. it was simpler than i expected. i'll post it up incase anyone ever googles this question.

all do is first get the s3 object you want to clone. after you have it, call setKey(filename) on the s3 object. "filename" is the path for where you want the object to be followed by the file name itself i.e. yours3bucketname/products/assets/picture.png

after your done with that, just call putObject(bucket_name, s3object), passing the s3object that you called setKey on as the second argument.

good luck! happy programming!

Upvotes: 0

Brent Worden
Brent Worden

Reputation: 10994

Not sure about JetS3t API but, the AWS SDK for Java does provide a simple copyObject method

Upvotes: 1

Related Questions