AWSSDK.S3 TransferUtility.Upload文件总是以root身份结束

时间:2017-12-15 19:35:52

标签: amazon-s3

我正在使用带有c#.net的AWSSDK.S3尝试将文件上传到S3上的现有文件夹

oTransferUtility.Upload("C:\\junk\\fae123.png", strBucket, "Media\\Cache\\f\\fae123.png");

之后我得到了文件的S3FileInfo

var oS3FileInfo = new S3FileInfo(oAmazonS3Client, strBucket, "Media\\Cache\\f\\fae123.png");

当我检查Exists属性时,它是错误的,当我查看存储桶时,我在根目录而不是文件夹中找到该文件。

我知道我正在构建正确的文件路径(又名密钥),因为我可以找到文件夹中已有的现有文件。 e.g。

var oS3FileInfo = new S3FileInfo(oAmazonS3Client, strBucket, "Media\\Cache\\f\\abc546.png");

当我检查Exists属性时,这是真的。

有没有人见过这个问题?

我也尝试了以下但没有成功,它还将所有上传内容转储到root

TransferUtilityUploadRequest oTransferUtilityUploadRequest = new TransferUtilityUploadRequest();

oTransferUtilityUploadRequest.FilePath = "C:\\junk\\fae123.png";
oTransferUtilityUploadRequest.Key = "Media\\Cache\\f\\fae123.png";
oTransferUtilityUploadRequest.BucketName = existingBucketName;

oTransferUtility.Upload(oTransferUtilityUploadRequest);

1 个答案:

答案 0 :(得分:0)

这是AWS中的一个错误,但我找到了解决方案。

如果缺少

,则显式创建S3文件夹
S3DirectoryInfo oDirectory = new S3DirectoryInfo(oAmazonS3Client, strBucket, "Media\\Cache\\f\\");
if (!oDirectory.Exists)
    oDirectory.Create();

从S3目录对象中打开一个S3文件,如果该文件尚不存在则无关紧要,它会在您写入时创建。

3FileInfo oS3FileInfo = oDirectory.GetFile("fae123.png");
using (System.IO.Stream stmTargetFileS3 = oS3FileInfo.OpenWrite())
{
    using (System.IO.Stream stmLocalFile = System.IO.File.OpenRead("C:\\junk\\fae123.png"))
        stmLocalFile.CopyTo(stmTargetFileS3);
}

这有效,LastWriteTime可以正确更新覆盖文件。