using System;
using System.IO;
using System.Configuration;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
namespace PushToStorage
{
class AzureStorageHelper
{
CloudStorageAccount storageAccount;
CloudBlobClient blobClient;
CloudBlobContainer container;
CloudBlockBlob blockBlob;
bool deleteAfterUpload = false;
public AzureStorageHelper()
{
// Retrieve storage account from connection string.
storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
// Create the blob client.
blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve a reference to a container.
container = blobClient.GetContainerReference("freblogs");
// Create the container if it doesn't already exist.
container.CreateIfNotExists();
string tmp = ConfigurationManager.AppSettings["DeleteAfterUpload"];
if (tmp != null)
{
deleteAfterUpload = (Int32.Parse(tmp) == 1) ? true : false;
}
}
public void UploadFileToBlob(string name, string path)
{
try
{
Console.WriteLine("Starting uploading " + name);
using (var fileStream = System.IO.File.OpenRead(path))
{
blockBlob = container.GetBlockBlobReference(name);
blockBlob.UploadFromStream(fileStream);
Console.WriteLine(name + " successfully uploaded!");
if (deleteAfterUpload)
{
fileStream.Close();
File.Delete(path);
Console.WriteLine(path + " deleted!");
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message);
}
}
public bool IsFileReady(String sFilename)
{
try
{
using (FileStream fileStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
if (fileStream.Length > 0)
return true;
else
return false;
}
}
catch (Exception)
{
return false;
}
}
}
class Program
{
static AzureStorageHelper azStorageHelper;
static void Main(string[] args)
{
Console.WriteLine("Initializing AzureStorageHelper!");
azStorageHelper = new AzureStorageHelper();
string path = ConfigurationManager.AppSettings["directory"];
string[] directories = Directory.GetDirectories(path, "*W3SVC*");
FileSystemWatcher[] fsw = new FileSystemWatcher[directories.Length];
Console.WriteLine(path + " " + fsw.Length);
for (int i = 0; i < directories.Length; i++)
{
fsw[i] = new FileSystemWatcher(directories[i]);
fsw[i].NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
fsw[i].Created += fsw_Created;
fsw[i].IncludeSubdirectories = true;
fsw[i].EnableRaisingEvents = true;
Console.WriteLine(String.Format("{0} Started watching directory {1} for files!", DateTime.Now.ToString(), directories[i]));
}
Console.ReadLine();
Console.WriteLine(DateTime.Now.ToString() + " Stopping!");
}
static void fsw_Created(object sender, FileSystemEventArgs e)
{
FileInfo fileInfo = new FileInfo(e.FullPath);
while (!azStorageHelper.IsFileReady(e.FullPath))
System.Threading.Thread.Sleep(1000);
Console.WriteLine(" Created " + e.Name + " " + e.FullPath);
azStorageHelper.UploadFileToBlob(e.Name, e.FullPath);
}
}
}