Esempio n. 1
0
        private static void GetFilesOnS3(object state)
        {
            System.Console.WriteLine("Check Files on S3...");
            ListObjectsResponse listObjectsResponse = _amazonS3Client.ListObjects(new ListObjectsRequest {
                BucketName = BucketName
            });

            foreach (S3Object s3Object in listObjectsResponse.S3Objects)
            {
                FileInfo fileInfo = new FileInfo(Path.Combine(_folder, s3Object.Key));
                if (fileInfo.Exists)
                {
                    System.Console.WriteLine(s3Object.Key + " exist");

                    GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest();
                    getObjectMetadataRequest.WithBucketName(BucketName).WithKey(s3Object.Key);
                    GetObjectMetadataResponse getObjectMetadataResponse = _amazonS3Client.GetObjectMetadata(getObjectMetadataRequest);

                    //int dateCompare = DateTime.Compare(fileInfo.LastWriteTime., DateTime.Parse(getObjectMetadataResponse.Metadata["x-amz-meta-LWT"]));
                    int dateCompare = (int)(fileInfo.LastWriteTime - DateTime.Parse(getObjectMetadataResponse.Metadata["x-amz-meta-LWT"])).TotalSeconds;

                    if (dateCompare == 0)
                    {
                        System.Console.WriteLine("No difference, do nothing");
                    }
                    else if (dateCompare < 0)
                    {
                        System.Console.WriteLine("S3 is newer");
                        DownloadFile(s3Object);
                    }
                    else if (dateCompare > 0)
                    {
                        System.Console.WriteLine("FS is newer");
                        UploadFile(fileInfo);
                    }
                }
                else
                {
                    System.Console.WriteLine(s3Object.Key + " doesn't exist");
                    DownloadFile(s3Object);
                }
            }


            foreach (string file in Directory.GetFiles(_folder))
            {
                FileInfo fileInfo = new FileInfo(file);

                if (!listObjectsResponse.S3Objects.Any(s => s.Key == fileInfo.Name))
                {
                    UploadFile(fileInfo);
                }
            }
        }
Esempio n. 2
0
        public bool ObjectExists(Uri uri)
        {
            CheckUri(uri);

            try
            {
                using (var client = CreateAmazonS3Client())
                {
                    try
                    {
                        var absolutePath = HttpUtility.UrlDecode(uri.AbsolutePath);
                        var key          = absolutePath.TrimStart('/');
                        var request      = new GetObjectMetadataRequest();

                        request.WithBucketName(bucketName)
                        .WithKey(key)
                        .WithTimeout(timeout)
                        .WithReadWriteTimeout(timeout);

                        using (client.GetObjectMetadata(request))
                        {
                            return(true);
                        }
                    }
                    catch (AmazonS3Exception ex)
                    {
                        if (ex.StatusCode == HttpStatusCode.NotFound)
                        {
                            return(false);
                        }

                        // Status not found - throw the exception.
                        throw;
                    }
                }
            }
            catch (Exception e)
            {
                throw new StorageException(string.Format("Failed to check if object exists {0}.", uri), e);
            }
        }