У меня есть несколько локальных файлов, которые нужно периодически обновлять с S3.Я бы предпочел обновить их, только если версия S3 новее.Я не совсем понимаю, как использовать свойство
ModifiedSinceDate
в объектах S3.На самом деле, я не уверен, использовать ли метаданные или есть что-то еще, что я должен проверять.
Я представляю что-то вроде этого:
GetObjectRequest request = new GetObjectRequest().WithBucketName(my_bucketName).WithKey(s3filepath);
using (GetObjectResponse response = client.GetObject(request))
{
string s3DateModified = response.ModifiedSinceDate; // Complete psuedo code
DateTime s3_creationTime = DateTime.Convert(s3DateModified); //Complete psuedo code
DateTime local_creationTime = File.GetCreationTime(@"c:\file.txt");
if (s3_creationTime > local_CreationTime)
{
//download the S3 object;
}
}
Большое спасибо!
РЕДАКТИРОВАТЬ ---------------------------------------
Я думаю, что я почти на месте ... Я пишу дату, измененную как метатег, когда я первоначально загружаю объект:
PutObjectRequest titledRequest = new PutObjectRequest();
.WithFilePath(savePath)
.WithBucketName(bucketName)
.WithKey(tempFileName)
.WithMetaData("Last-Modified", System.DateTime.Now.ToString());
Затем, используя это для проверки/ download:
using (GetObjectResponse response = client.GetObject(request))
{
string lastModified = response.Metadata["x-amz-meta-last-modified"];
DateTime s3LastModified = Convert.ToDateTime(lastModified);
string dest = Path.Combine(@"c:\Temp\", localFileName);
DateTime localLastModified = File.GetLastWriteTime(dest);
if (!File.Exists(dest))
{
response.WriteResponseStreamToFile(dest);
}
if (s3LastModified > localLastModified)
{
response.WriteResponseStreamToFile(dest);
}
}
Что-то ломается, я думаю, возможно, что WriteResponseStream асинхронный, и он пытается выполнить два respnse.WriteResponseStreamtToFile (dest) одновременноВ любом случае, я обновлю это, если смогу прибить его.