Gitz
Gitz

Reputation: 820

How to create subdirectory in amazon s3 bucket

i am using Amazon S3 Web-services and not able to create sub directory on my bucket.

i want something like that

when user upload the files, a sub directory create on S3 Bucket with the name of user id and files are stored into the sub directory .

i am using the following code

 AmazonS3Client s3Client = new AmazonS3Client("AWSAccessKey", "AWSSecretKey", Amazon.RegionEndpoint.APSoutheast1);  

    protected void btnUpload_Click(object sender, EventArgs e)
    {

        if (!string.IsNullOrEmpty(fileUpload.FileName))
        {
            //Saving File to local disk folder.
            string filePath = Server.MapPath("aa") + "\\" + fileUpload.FileName;
            string fileExtension = fileUpload.FileName.Substring(fileUpload.FileName.LastIndexOf(".") + 1);
            fileUpload.SaveAs(filePath);
            string contentType = GetContentType(fileExtension);    

            //Push the given object into S3 Bucket
            PutObjectRequest objReq = new PutObjectRequest
            {
                Key = fileUpload.FileName,
                FilePath =  filePath,
                ContentType = contentType,
                BucketName = "datastore.MyData",
                CannedACL = S3CannedACL.Private,               

            };

            PutObjectResponse response = s3Client.PutObject(objReq);
            if (response.ETag != null)
            {
                string etag = response.ETag;
                string versionID = response.VersionId;
                Response.Write("<script>alert('File uploaded to S3 Bucket Successfully.');</script>");
            }
            //Deleting Localy Saved File
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
        }
    }
    private string GetContentType(string fileExtension)
    {
        string contentType = string.Empty;
        switch (fileExtension)
        {
            case "bmp": contentType = "image/bmp"; break;
            case "jpeg": contentType = "image/jpeg"; break;
            case "jpg": contentType = "image/jpg"; break;
            case "gif": contentType = "image/gif"; break;
            case "tiff": contentType = "image/tiff"; break;
            case "png": contentType = "image/png"; break;
            case "plain": contentType = "text/plain"; break;
            case "rtf": contentType = "text/rtf"; break;
            case "msword": contentType = "application/msword"; break;
            case "zip": contentType = "application/zip"; break;
            case "mpeg": contentType = "audio/mpeg"; break;
            case "pdf": contentType = "application/pdf"; break;
            case "xgzip": contentType = "application/x-gzip"; break;
            case "xcompressed": contentType = "applicatoin/x-compressed"; break;
        }
        return contentType;
    }

Please help me to achieve this.

Upvotes: 2

Views: 8738

Answers (3)

xyz
xyz

Reputation: 782

The simplest way is to use TransferUtility.

var fileTransferUtility = new TransferUtility(_s3Client);
fileTransferUtility.Upload(localFilePath, bucketName+"/"+ subFolder);

Upvotes: 0

Paul Salvi
Paul Salvi

Reputation: 31

you can also use this method.

 string S3FileDir = "/Demo/Test/";

    TransferUtility fileTransferUtility = new TransferUtility(keyId,secretekey,RegionEndpoint.USWest);               
                    fileTransferUtility.Upload(localFilePath, BucketName + S3FileDir);

Upvotes: 1

Rajeev Mehta
Rajeev Mehta

Reputation: 820

There are no folders in s3, only key/value pairs. The key can contain slashes ("/")and that will make it appear as a folder in management console, but programmatically it's not a folder it is a String value.

we use the FileKey with the character '/' at the end to show that you want to create a folder.

PutObjectRequest objReq = new PutObjectRequest
            {
                Key = "Name of the folder you want to create/" fileUpload.FileName,
                FilePath =  filePath,
                ContentType = contentType,
                BucketName = "datastore.MyData",
                CannedACL = S3CannedACL.Private,               

            };

Upvotes: 6

Related Questions