iT Synergy Blogs

Growing Innovation - Soluciones a problemas reales

  • Facebook
  • Instagram
  • LinkedIn
  • Phone
  • Twitter
  • YouTube

Copyright © 2025 · iT Synergy·

Cómo subir una carpeta local a un contenedor de Azure blob storage ?
Cómo subir una carpeta local a un contenedor de Azure blob storage ? avatar

May 19, 2016 By Jimmy Quejada Meneses Leave a Comment

Hola amigos!

En días pasados en un proyecto que desarrollabamos con el equipo de iT Synergy del proyecto CPE Windows App Prendo Y Aprendo me encontré con el desafío de desarrollar la funcionalidad para subir un directorio (carpeta) desde el pc del usuario a un contenedor blob storage de Azure. Aunque encontré en internet algunos links base no lograban la implementación completa o tenían referencias obsoletas. Agradezco a las pesonas que con sus post me ayudaron para resolver el problema. 

En este post les comparto la clase base de la implementación desarrollada en C#. El proyecto fue implementado con ASP.NET MVC 5.

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.RetryPolicies;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;

namespace CPE.PrendoYAprendo.ContentManager.Models
{
/// <summary>
/// Blob storage manager class
/// </summary>
public class BlobManager
{
private readonly CloudStorageAccount _account;
private readonly CloudBlobClient _blobClient;

/// <summary>
/// Initializes a new instance of the <see cref=”BlobManager” /> class.
/// </summary>
/// <param name=”connectionStringName”>Name of the connection string in app.config or web.config file.</param>
public BlobManager(string connectionStringName)
{
_account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings[“StorageConnectionString”].ToString());

_blobClient = _account.CreateCloudBlobClient();

IRetryPolicy linearRetryPolicy = new LinearRetry(TimeSpan.FromSeconds(2), 10);
_blobClient.DefaultRequestOptions.RetryPolicy = linearRetryPolicy;

}

/// <summary>
/// Updates or created a blob in Azure blobl storage
/// </summary>
/// <param name=”containerName”>Name of the container.</param>
/// <param name=”blobName”>Name of the blob.</param>
/// <param name=”content”>The content of the blob.</param>
/// <returns></returns>
public bool PutBlob(string containerName, string blobName, byte[] content)
{
return ExecuteWithExceptionHandlingAndReturnValue(
() =>
{
CloudBlobContainer container = _blobClient.GetContainerReference(containerName);
CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
// Primero se convierte el array a stream
//Stream stream = new MemoryStream(content);
using (Stream stream = new MemoryStream(content))
{
blob.UploadFromStream(stream);
}
});
}

/// <summary>
/// Creates the container in Azure blobl storage
/// </summary>
/// <param name=”containerName”>Name of the container.</param>
/// <returns>True if contianer was created successfully</returns>
public bool CreateContainer(string containerName)
{
return ExecuteWithExceptionHandlingAndReturnValue(
() =>
{
CloudBlobContainer container = _blobClient.GetContainerReference(containerName);
container.Create();
});
}

/// <summary>
/// Checks if a container exist.
/// </summary>
/// <param name=”containerName”>Name of the container.</param>
/// <returns>True if conainer exists</returns>
public bool DoesContainerExist(string containerName)
{
bool returnValue = false;
ExecuteWithExceptionHandling(
() =>
{
IEnumerable<CloudBlobContainer> containers = _blobClient.ListContainers();
returnValue = containers.Any(one => one.Name == containerName);
});
return returnValue;
}

/// <summary>
/// Uploads the directory to blobl storage
/// </summary>
/// <param name=”sourceDirectory”>The source directory name.</param>
/// <param name=”containerName”>Name of the container to upload to.</param>
/// <returns>True if successfully uploaded</returns>
public bool UploadDirectory(string sourceDirectory, string containerName)
{
string[] s = containerName.Split(‘/’);
string sContainerName = s[0];
string sFolderName = s[1];

return UploadDirectory(sourceDirectory, sContainerName, sFolderName);
//return UploadDirectory(sourceDirectory, containerName, string.Empty);

}

private bool UploadDirectory(string sourceDirectory, string containerName, string prefixAzureFolderName)
{
return ExecuteWithExceptionHandlingAndReturnValue(
() =>
{
if (!DoesContainerExist(containerName))
{
CreateContainer(containerName);
}
var folder = new DirectoryInfo(sourceDirectory);
var files = folder.GetFiles();
foreach (var fileInfo in files)
{
string blobName = fileInfo.Name;
if (!string.IsNullOrEmpty(prefixAzureFolderName))
{
blobName = prefixAzureFolderName + “/” + blobName;
}
PutBlob(containerName, blobName, File.ReadAllBytes(fileInfo.FullName));
}
var subFolders = folder.GetDirectories();
foreach (var directoryInfo in subFolders)
{
var prefix = directoryInfo.Name;
if (!string.IsNullOrEmpty(prefixAzureFolderName))
{
prefix = prefixAzureFolderName + “/” + prefix;
}
UploadDirectory(directoryInfo.FullName, containerName, prefix);
}
});
}

private void ExecuteWithExceptionHandling(Action action)
{
try
{
action();
}
catch (StorageException ex)
{
var requestInformation = ex.RequestInformation;
if ((int)(System.Net.HttpStatusCode)requestInformation.HttpStatusCode != 409)
{
throw;
}
}
}

private bool ExecuteWithExceptionHandlingAndReturnValue(Action action)
{
try
{
action();
return true;
}
catch (StorageException ex)
{
var requestInformation = ex.RequestInformation;
if ((int)(System.Net.HttpStatusCode)requestInformation.HttpStatusCode == 409)
{
return false;
}
throw;
}
}
}
}

Espero les sea de ayuda.

Cordial saludo,

 

 

 

Filed Under: Desarrollo de software Tagged With: ASP.NET, Azure, Blob Storage, C#, MVC 5

Create a complete automation backup plan for your wordpress infrastructure (on the cloud)
Create a complete automation backup plan for your wordpress infrastructure (on the cloud) avatar

October 28, 2011 By Juan Camilo Zapata Montúfar Leave a Comment

If you manage a standard wordpress infrastructure ,where you have an installation of a wordpress blog  and you have two layers separated , the database layer  (in my case mysql) on the database server , and other layer for the presentation (web server) that stores the images uploaded , the themes , and the scripts , you should be aware of the backup process on these two separate layers.

Backup Database file on the database server

There is an easy way and the one i recommend , and is by using the wp-db-backup plugin that you can find here , this plugin actually make a scheduled backup of your wordpress database , you chose monthy , weekly or dayly , also you can chose the backup to be sended by mail witch is very helpful.

The problem with this configuration is that you only have the backup of the database , and the database is not everything concerning wordpress contents, you should also backup the pictures of your blogs , the themes , the uploaded files and adittional scripts.

There is already a workaround to backup ALL your content on the cloud using Amazon S3 services on site http://www.wordpressbackup.org/ which is good but you have to pay for the S3 services processing.

Combine wp-dbbackup plugin + Dropbox cloud services + Windows Task Scheduler

A free alternative i propose is by using the wp-dbbackup plugin along with the DropBox API.

For that i created a c# application(that you can download below) that do the follwing:

1.Zip the contents of the wordpress Images (optionally i can especify the scritps folder but my interest relies only on the images folder for now).

2.Using DropBox API with the SharpBox libraries and a DeveloperKey (that you can obtain here  ) and upload the zipped file to my free DropBox account.

3.Create a Task on the Task scheduler of Windows  to execute the program every week.

You should note that i did not mentioned  wp-dbplugin here , well,  that is because the wp-dbplugin just works nice , and i will “improve” this solution by adding the C# program that backups the images folder of  the wordpress webserver content.

This solution is free and is automated so you have an easy way to backup your wordpress solution easily.

Limitations

Because DropBox is free it gives you 2gb of free space , making a weekly backup of your wordpress images folder can fill that space very quickly . You should check weekly your DropBox backups and delete old backups to prevent getting out of space.

You can download the source code below:

WpZipToDropBox

Filed Under: Cloud, DropBox, SharpBox, Windows Scheduler Tagged With: Backup, C#, Cloud, DropBox, DropBox API, SharpBox, Windows, Wordpress, wordpress backup, wordpress images backup, wordpress on the cloud, wordpress to dropbox, WP-db-Backup

Team


Marco
Antonio Hernández

Jaime
Alonso Páez

Luis
Carlos Bernal

Ana
María Orozco

Juan
Camilo Zapata

Sonia
Elizabeth Soriano

Diana
Díaz Grijalba

Carlos
Alberto Rueda

Bernardo
Enrique Cardales

Alexandra
Bravo Restrepo

Juan
Alberto Vélez

Diana
Paola Padilla

Jhon
Jairo Rodriguez

Brayan
Ruiz

Jesús
Javier Hernández

Alejandro
Garcia Forero

Gustavo
Adolfo Echeverry

Yully
Arias Castillo

Carlos
Andrés Vélez

Oscar
Alberto Urrea

Odahir
Rolando Salcedo

Jimmy
Quejada Meneses

Natalia
Zartha Suárez

Josué
Leonardo Bohórquez

Mario
Andrés Cortés

Eric
Yovanny Martinez

Carolina
Torres Rodríguez

Juan
Mauricio García

Tag Cloud

.NET (9) 940px (1) Analysis Services mdx (1) An attempt was made to load a program with an incorrect format. (1) ASP.NET MVC (1) Azure (3) Backup (1) BAM (7) BAM API (1) BAMTraceException (2) BI (3) BizTalk (24) Business Intelligence (6) C# (2) caracteristicas de publicacion (2) Content Editor (3) ESB (15) ESB Toolkit (3) General (4) habilitar caracteristicas (3) indexes (2) Integration Services (2) Master Page (3) MDX (2) MSE (11) net.tcp (2) Office 365 (2) Oracle (2) Performance Point (2) Public Website (2) Receive Location (2) SDK (2) Servicio Web (2) Sharepoint 2010 (2) SharePoint 2013 (4) SharePoint Online (2) SOA (8) Soap Fault (2) Sort Months MDX (2) SQL Server (2) Visual (2) Visual Studio 2010 (2) WCF (19) Windows (3) Windows 8 (17)

Categories

  • .NET (33)
  • Analysis Services (1)
  • ASP.NET MVC (2)
  • Azure (7)
  • BAM (9)
  • BAM PrimaryImport (3)
  • BigData (1)
  • BizTalk (77)
  • BizTalk 2010 configurations (57)
  • BizTalk Application (60)
  • BizTalk Services (13)
  • Business Intelligence (4)
  • Cloud (3)
  • CMD (1)
  • CodeSmith – NetTiers (2)
  • CommandPrompt (1)
  • CRM OptionSet mapping component (1)
  • Desarrollo de software (6)
  • develop (6)
  • developers (3)
  • DropBox (1)
  • Dynamics (1)
  • Enterprise Architect (1)
  • Entity Framework (1)
  • Errores BizTalk (2)
  • ESB (27)
  • ETL (1)
  • Event Viewer (1)
  • Excel Services (1)
  • Foreach loop container (1)
  • General (4)
  • Gerencia de Proyectos (2)
  • Google (1)
  • Grouped Slices (1)
  • Human Talent (1)
  • IIS (4)
  • Integración (6)
  • Integration Services (3)
  • KingswaySoft (1)
  • Lync (1)
  • MSE (13)
  • Office 365 (2)
  • Oracle Data Adapter (2)
  • Performance Point (4)
  • Picklist (1)
  • Pivot Table (1)
  • Procesos (1)
  • Pruebas (1)
  • Public Website (2)
  • Reports (1)
  • SCRUM (1)
  • SDK (2)
  • SEO (1)
  • Servicios (2)
  • Sharepoint (9)
  • SharePoint 2010 (10)
  • SharePoint 2013 (4)
  • SharePoint Online (2)
  • SharpBox (1)
  • Shortcuts (1)
  • Sin categoría (1)
  • SOA (50)
  • SQL (5)
  • SQL Server (3)
  • SQL Server Management Studio (1)
  • SSIS (3)
  • SSL (1)
  • SSO (1)
  • Tracking Profile Editor (2)
  • Twitter (1)
  • Uncategorized (1)
  • Virtual Network (2)
  • Visual Studio 11 (1)
  • Visual Studio 2010 (2)
  • Visual Studio Online (1)
  • VMware (2)
  • WCF (24)
  • Web (1)
  • Web Api (1)
  • Windows (5)
  • Windows 8 (11)
  • Windows Azure (2)
  • Windows Live Write (1)
  • Windows Phone (7)
  • Windows Phone 8 (1)
  • Windows Scheduler (1)
  • windows8 (2)
  • WindowsRT (3)
  • WP7 SDK (1)

Manage

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org