我正在使用Amazon S3 Web服务,而无法在我的存储桶上创建子目录。
我想要那样的东西
当用户上传文件时,在S3 Bucket上创建一个子目录,其名称为user id,文件存储在子目录中。
我正在使用以下代码
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;
}
请帮助我实现这一目标。
答案 0 :(得分:3)
s3
中没有文件夹,只有key/value
对。密钥可以包含斜杠("/")
,这将使其在管理控制台中显示为文件夹,但从编程方面来看,它不是文件夹,而是字符串值。
我们将FileKey与字符&#39; /&#39;一起使用最后显示您要创建一个文件夹。
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,
};
答案 1 :(得分:0)
您也可以使用此方法。
string S3FileDir = "/Demo/Test/";
TransferUtility fileTransferUtility = new TransferUtility(keyId,secretekey,RegionEndpoint.USWest);
fileTransferUtility.Upload(localFilePath, BucketName + S3FileDir);
答案 2 :(得分:0)
最简单的方法是使用TransferUtility。
var fileTransferUtility = new TransferUtility(_s3Client);
fileTransferUtility.Upload(localFilePath, bucketName+"/"+ subFolder);