2016-10-27 8 views
0

に私はこのコードを使用してS3にすべての私のローカルファイルをアップロードしています:C#の同期のみ、新しいファイルをAmazon 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以上のファイルがあるとしましょう。

s3にすでに存在するファイルの再アップロードを避け、最後の同期以降にローカルディレクトリに置かれた新しいファイルのみをアップロードする方法はありますか?

リモートファイルとローカルファイルのリストを取得して比較し、新しいファイルをループごとに1つずつアップロードする必要がありますか、それとも簡単な方法がありますか?

答えて

0

すべてのファイルが置き換えられます。 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; 
    } 
関連する問題