【发布时间】:2018-04-26 11:32:47
【问题描述】:
我有一个简单的测试来验证我是否可以检查 S3 中是否存在文件。但是,当我使用S3FileInfo 类(建议检查存在)运行测试时,它将始终返回false。我添加了其他验证方法,以查看文件是否未正确上传,但确实如此。
测试:
[Fact]
public void FileExists()
{
var fileName = Guid.NewGuid().ToString() + "\\dummy\\path\\to\\file.txt";
using (var client = clientFactory.GetClient())
{
var objectRequest = new PutObjectRequest();
objectRequest.BucketName = config.BucketName;
objectRequest.ContentBody = Guid.NewGuid().ToString();
objectRequest.Key = fileName;
var response = client.PutObject(objectRequest);
Assert.Equal(HttpStatusCode.OK, response.HttpStatusCode);
var request = new ListObjectsV2Request();
request.BucketName = config.BucketName;
var listResponse = client.ListObjectsV2(request);
Assert.Equal(HttpStatusCode.OK, listResponse.HttpStatusCode);
var contains = listResponse.S3Objects.Any(o => o.Key == fileName && o.BucketName == config.BucketName);
Assert.True(contains);
var putObject = listResponse.S3Objects.First(o => o.Key == fileName && o.BucketName == config.BucketName);
Assert.Equal(config.BucketName, putObject.BucketName);
Assert.Equal(fileName, putObject.Key);
Assert.InRange(putObject.LastModified, DateTime.Now.AddMinutes(-1), DateTime.Now.AddMinutes(1));
Assert.Equal(36, putObject.Size);
var getResponse = client.GetObject(config.BucketName, fileName);
Assert.Equal(HttpStatusCode.OK, getResponse.HttpStatusCode);
Assert.Equal(config.BucketName, getResponse.BucketName);
Assert.Equal(fileName, getResponse.Key);
Assert.InRange(getResponse.LastModified.ToLocalTime(), DateTime.Now.AddMinutes(-1), DateTime.Now.AddMinutes(1));
using (var responseStream = getResponse.ResponseStream)
using (var reader = new StreamReader(responseStream))
{
var content = reader.ReadToEnd();
Assert.Equal(objectRequest.ContentBody, content);
}
var info = new S3FileInfo(client, config.BucketName, fileName);
Assert.True(info.Exists);
}
}
此测试中的所有断言都通过 - 除了最后一个。我知道这不是 S3 中的延迟问题,因为之前的断言通过了。因此,我认为正在发生两件事之一:要么我对 S3FileInfo 类所做的事情有问题,要么我发现的 SDK 存在错误。我认为后者不太可能,但命令是如此简单,以至于我不知道我会如何做前者。我正在使用 .Net Amazon S3 SDK 的 3.3.12 版本。
更新:更新到 3.3.12.1 并没有解决问题。
【问题讨论】:
标签: c# amazon-s3 sdk file-exists fileinfo