在c#中,如何比较本地文件和Amazon S3文件的datemodified属性

本文关键字:文件 Amazon S3 属性 datemodified 何比较 比较 | 更新日期: 2023-09-27 18:10:27

我有一些需要偶尔从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());

然后使用这个检查/下载:

 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是异步的,它正在尝试两个响应。writeresponsestreamttofile (dest)在同一时间。不管怎样,如果我能搞定的话我会更新的。

在c#中,如何比较本地文件和Amazon S3文件的datemodified属性

您应该使用GetObjectMetadata来检索有关对象的信息,而无需实际下载对象本身。

GetObjectMetadataResponse类有一个LastModified属性,或者你可以使用自定义元数据我猜。

然后使用GetObject实际下载并保存文件。

类似:

using (GetObjectMetadataResponse response = client.GetObjectMetadata(request))
{
    DateTime s3LastModified = response.LastModified;
    string dest = Path.Combine(@"c:'Temp'", localFileName);
    DateTime localLastModified = File.GetLastWriteTime(dest);
    if (!File.Exists(dest) || s3LastModified > localLastModified)
    {
        // Use GetObject to download and save file
    }
}