【问题标题】:c# sync only new files to amazon s3c# 仅将新文件同步到 amazon s3
【发布时间】:2017-03-10 19:23:44
【问题描述】:

我正在使用以下代码将所有本地文件上传到 s3:

static string bucketName = "s3bucket";
static string directoryPath = @"C:\data\";    

private void btnUpload_Click(object sender, EventArgs e) {
    try {
        TransferUtility directoryTransferUtility =
            new TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.USWest2));

        TransferUtilityUploadDirectoryRequest request =
            new TransferUtilityUploadDirectoryRequest {
                BucketName = bucketName,
                Directory = directoryPath,
                SearchPattern = "*.xml"
            };

        directoryTransferUtility.UploadDirectory(request);
        MessageBox.Show("Upload completed");

    } catch (AmazonS3Exception ex) {
        MessageBox.Show(ex.Message);
    }
}

如果我再次运行代码,所有文件都会重新上传到 s3,如果假设我们的本地目录中有 1000 多个文件,那将是一个坏主意。

我知道我可以逐个文件比较,因为 aws 存储每个文件的 md5。 所以我的问题是我可以使用预装的命令来执行此操作吗?我是否必须逐个文件递归比较?如果同步命令存在于 awscli 包 (aws s3 sync ./sourceDir s3://bucketname/) 上,它是否也存在于 c# 上?

【问题讨论】:

    标签: c# amazon-web-services amazon-s3 upload synchronization


    【解决方案1】:

    所有文件都将被替换。 S3 docs ,但如果您仍想检查文件,您可以使用类似这样的功能

        ListObjectsRequest request = new ListObjectsRequest()
        {
            BucketName = "Your Bucket name",
            Delimiter = "/",
            Prefix = "location"
        };
    
        public bool CheckFile(ListObjectsRequest request)
        {
            bool res = false;
    
            try
            {
    
                ListObjectsResponse response = s3client.ListObjects(request);
    
                if (response.S3Objects != null && response.S3Objects.Count > 0)
                {
                    S3Object o = response.S3Objects.Where(x => x.Size != 0 && x.LastModified > DateTime.Now.AddHours(-24)).FirstOrDefault();
    
                    if (o != null)
                    {
                        //you can use thes fields
                        // o.Key; //o.Size, //o.LastModified
    
                        res = true;
    
                    }
    
                }
                else
                {
                    res = false;
    
                }
    
            }
            catch (Exception)
            {
                throw;
            }
    
            return res;
        }
    

    【讨论】:

    • 我目前正在这样做,但我想知道是否有同步选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2010-10-14
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多