Reputation: 820
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
Reputation: 782
The simplest way is to use TransferUtility.
var fileTransferUtility = new TransferUtility(_s3Client);
fileTransferUtility.Upload(localFilePath, bucketName+"/"+ subFolder);
Upvotes: 0
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
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