我正在使用带有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);
答案 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
可以正确更新覆盖文件。