Skip to content

Instantly share code, notes, and snippets.

@Vladimir-Novick
Last active September 20, 2020 07:24
Show Gist options
  • Save Vladimir-Novick/daabbb0aa77368f679eeef7fd5f247b5 to your computer and use it in GitHub Desktop.
Save Vladimir-Novick/daabbb0aa77368f679eeef7fd5f247b5 to your computer and use it in GitHub Desktop.
Amazon S3 File Downloader ( C# Class )
public class AmazonS3FileReader
{
private AmazonS3Client GetAmazonS3Client()
{
AmazonS3Client _client = new AmazonS3Client(
HttpFileReaderConfig.GetConfigData.AmazonS3AccessKey,
HttpFileReaderConfig.GetConfigData.AmazonS3SecretKey,
new AmazonS3Config { ServiceURL = HttpFileReaderConfig.GetConfigData.ServiceURL }
);
return _client;
}
public List<S3Object> FileDownloader()
{
List<S3Object> ret = new List<S3Object>();
try
{
using (AmazonS3Client s3Client = GetAmazonS3Client()) {
try
{
List<S3Object> chekS3Objects = new List<S3Object>();
ListObjectsRequest request = new ListObjectsRequest();
request.BucketName = HttpFileReaderConfig.GetConfigData.BucketName;
Task<ListObjectsResponse> task = s3Client.ListObjectsAsync(request);
task.Wait();
ListObjectsResponse response = task.Result;
List<String> keys = HttpFileReaderConfig.GetConfigData.Keys;
foreach (S3Object item in response.S3Objects)
{
String itemF = keys.FirstOrDefault(o => o == item.Key) ;
if (itemF != null)
{
chekS3Objects.Add(item);
ReadAmasonFile(s3Client,item);
}
}
var fileNameListOfFiles = HttpFileReaderConfig.GetConfigData.TargetFolder + "ListObjects.json";
var logWriter = System.IO.File.CreateText(fileNameListOfFiles);
logWriter.WriteLine(chekS3Objects.ToJson());
logWriter.Dispose();
} catch ( Exception ex)
{
}
}
}
catch (Exception ex) { }
return ret ;
}
private void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
private void ReadAmasonFile(AmazonS3Client s3Client,S3Object item)
{
String[] k = item.Key.Split("/");
String filename = HttpFileReaderConfig.GetConfigData.TargetFolder + k[k.Length - 1];
FileInfo fileInfo = new FileInfo(filename);
if ((!fileInfo.Exists) || (fileInfo.LastWriteTime < item.LastModified))
{
try
{
Task<GetObjectResponse> taskGetObjectResponse =
s3Client.GetObjectAsync(HttpFileReaderConfig.GetConfigData.BucketName, item.Key);
taskGetObjectResponse.Wait();
using (GetObjectResponse getObjRespone = taskGetObjectResponse.Result)
{
using (Stream responseStream = getObjRespone.ResponseStream)
{
using (Stream fileStream = File.Create(filename))
{
CopyStream(responseStream, fileStream);
fileStream.Flush();
fileStream.Close();
}
}
}
File.SetCreationTime(filename, item.LastModified);
File.SetLastWriteTime(filename, item.LastModified);
string ext = Path.GetExtension(filename).ToLower();
if (ext == ".zip")
{
ZipFile.ExtractToDirectory(filename, HttpFileReaderConfig.GetConfigData.TargetFolder,true);
}
}
catch (Exception ex) {
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment