{"id":1114,"date":"2019-07-18T06:48:00","date_gmt":"2019-07-18T06:48:00","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=1114"},"modified":"2019-07-18T09:51:06","modified_gmt":"2019-07-18T09:51:06","slug":"como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/","title":{"rendered":"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1156 size-full\" title=\"Varias personas haciendo una carrera contemplan como otra persona toma ventaja gracias a una bombilla con alas que le eleva del suelo\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\" alt=\"\" width=\"1905\" height=\"1286\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg 1905w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n-300x203.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n-768x518.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n-1024x691.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n-610x412.jpg 610w\" sizes=\"auto, (max-width: 1905px) 100vw, 1905px\" \/><\/p>\n<p>En muchas aplicaciones modernas tenemos la necesidad de realizar cargas de archivos grandes a Azure. En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.<\/p>\n<p><!--more--><\/p>\n<h2>Veamos antes un ejemplo<\/h2>\n<p>Para que podamos observar la comparaci\u00f3n, te voy a mostrar un ejemplo de c\u00f3mo subir un archivo a un Blob Storage e Azure y comprobar tiempos.<\/p>\n<p>En el ejemplo, usaremos la \u00faltima versi\u00f3n del paquete Nuget\u00a0 <a href=\"https:\/\/www.nuget.org\/packages\/WindowsAzure.Storage\/\">WindowsAzure.Storage. <\/a>Con esto, una aplicaci\u00f3n de Consola de .Net Core y un PDF de unos 70MB, tenemos todo lo necesario.<\/p>\n<p>\u00a1Vamos all\u00e1!<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\"> \r\n\r\nusing Microsoft.WindowsAzure.Storage;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace AzureStorageDataMovement\r\n{\r\n   class Program\r\n   {\r\n       static async Task Main(string&#x5B;] args)\r\n       {\r\n          var sourcePath = @&quot;C:\\Temp\\MyLargePDF.pdf&quot;;\r\n          var containerName = &quot;docs1&quot;;\r\n          var folderName = &quot;testAzureStorageDataMovement&quot;;\r\n          Console.WriteLine($&quot;Size of {Path.GetFileName(sourcePath)}: {new FileInfo(sourcePath).Length} bytes&quot;);\r\n\r\n          var newFileUri = await UploadBlobToContainer(containerName, folderName, sourcePath);\r\n\r\n          Console.WriteLine($&quot;The new Azure Blob File id: {newFileUri}&quot;);\r\n          Console.ReadKey();\r\n       }\r\n\r\n       public static async Task&lt;Uri&gt; UploadBlobToContainer(string containerName, string folderName, string sourcePath)\r\n       {\r\n           try\r\n           {\r\n               var connectionString = &quot;DefaultEndpointsProtocol=https;AccountName=XXXXXX;AccountKey=XXXXXX ==;EndpointSuffix=core.windows.net&quot;;\r\n               var storageAccount = CloudStorageAccount.Parse(connectionString);\r\n               var client = storageAccount.CreateCloudBlobClient();\r\n               var container = client.GetContainerReference(containerName);\r\n               \r\n               \/\/ Me gusta aplicar esta condici\u00f3n ya que provoca errores 409 en Application Insights si el container existe\r\n               if (!await container.ExistsAsync())   \r\n               {\r\n                   await container.CreateIfNotExistsAsync();\r\n               }\r\n               var folder = container.GetDirectoryReference(folderName);\r\n               var blobName = $&quot;{Guid.NewGuid().ToString()}{Path.GetExtension(sourcePath)}&quot;;\r\n               var blockBlob = folder.GetBlockBlobReference(blobName);\r\n               blockBlob.Metadata.Add(&quot;originalFileName&quot;, EncodeFileNameToBase64(Path.GetFileName(sourcePath)));\r\n\r\n               var stopwatch = Stopwatch.StartNew();\r\n               await blockBlob.UploadFromFileAsync(sourcePath);\r\n               stopwatch.Stop();\r\n\r\n               Console.WriteLine(&quot;Time elapsed: {0:hh\\\\:mm\\\\:ss}&quot;, stopwatch.Elapsed);\r\n               return blockBlob.Uri;\r\n           }\r\n           catch (StorageException ex)\r\n           {\r\n               throw new AzureStorageDataMovementException($&quot;Error while uploading blob to container {containerName}.&quot;, ex);\r\n           }\r\n       } \r\n         \r\n       private static string EncodeFileNameToBase64(string fileName)\r\n       {\r\n           var originBytes = Encoding.UTF8.GetBytes(fileName);\r\n           return Convert.ToBase64String(originBytes);\r\n       }\r\n    }\r\n}\r\n<\/pre>\n<p>Ejecutando nuestro programa obtenemos la siguiente salida<\/p>\n<p><div id=\"attachment_1138\" style=\"width: 760px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementNormal.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1138\" class=\"wp-image-1138\" title=\"Tiempo de subida del archivo a nuestro Blob, 11 segundos\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementNormal-300x70.png\" alt=\"Tiempo de subida del archivo a nuestro Blob, 11 segundos\" width=\"750\" height=\"175\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementNormal-300x70.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementNormal.png 567w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><p id=\"caption-attachment-1138\" class=\"wp-caption-text\">Tiempo de subida del archivo a nuestro Blob, 11 segundos<\/p><\/div><\/p>\n<p>Size of MyLargePDF.pdf: 73303135 bytes<br \/>\nTime elapsed: 00:00:11<br \/>\nThe new Azure Blob File id: https:\/\/xxxxxxxx.blob.core.windows.net\/docs1\/testAzureStorageDataMovement\/cd2ebb4c-76c7-40d2-aaed-5ed36e418898.pdf<\/p>\n<p>Como podemos observar, ha tardado 11 segundos en subir el archivo a nuestro Blob.<\/p>\n<h2>Ahora, la versi\u00f3n vitaminada<\/h2>\n<p>Como si nuestra aplicaci\u00f3n se tomara la famosa bebida energ\u00e9tica que DA ALAS, usaremos el paquete Nuget <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Azure.Storage.DataMovement\/\">Microsoft.Azure.Storage.DataMovement<\/a><\/p>\n<p>Realizaremos una peque\u00f1a modificaci\u00f3n en nuestro c\u00f3digo.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nusing Microsoft.Azure.Storage;\r\nusing Microsoft.Azure.Storage.Blob;\r\nusing Microsoft.Azure.Storage.DataMovement;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace AzureStorageDataMovementEnhanced\r\n{\r\n   class Program\r\n   {\r\n      static async Task Main(string&#x5B;] args)\r\n      {\r\n         var sourcePath = @&quot;C:\\Temp\\MyLargePDF.pdf&quot;;\r\n         var containerName = &quot;docs1&quot;;\r\n         var folderName = &quot;testAzureStorageDataMovement&quot;;\r\n         Console.WriteLine($&quot;Size of {Path.GetFileName(sourcePath)}: {new FileInfo(sourcePath).Length} bytes&quot;);\r\n\r\n         var newFileUri = await UploadBlobToContainer(containerName, folderName, sourcePath);\r\n\r\n         Console.WriteLine($&quot;The new Azure Blob File id: {newFileUri}&quot;);\r\n         Console.ReadKey();\r\n      }\r\n\r\n      public static async Task&lt;Uri&gt; UploadBlobToContainer(string containerName, string folderName, string sourcePath)\r\n      { \r\n         try\r\n         {  \r\n            var connectionString = &quot;DefaultEndpointsProtocol=https;AccountName=XXXXXX;AccountKey=XXXXXX ==;EndpointSuffix=core.windows.net&quot;;\r\n            var storageAccount = CloudStorageAccount.Parse(connectionString);\r\n            var client = storageAccount.CreateCloudBlobClient();\r\n            var container = client.GetContainerReference(containerName);\r\n\r\n           \/\/ Me gusta aplicar esta condici\u00f3n ya que provoca errores 409 en Application Insights si el container existe\r\n           if (!await container.ExistsAsync())\r\n           {\r\n              await container.CreateIfNotExistsAsync();\r\n           }\r\n           var folder = container.GetDirectoryReference(folderName);\r\n           var blobName = $&quot;{Guid.NewGuid().ToString()}{Path.GetExtension(sourcePath)}&quot;;\r\n           var blockBlob = folder.GetBlockBlobReference(blobName);\r\n           blockBlob.Metadata.Add(&quot;originalFileName&quot;, EncodeFileNameToBase64(Path.GetFileName(sourcePath)));\r\n\r\n           \/\/ Aqui est\u00e1 la madre del cordero\r\n           TransferManager.Configurations.ParallelOperations = ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 8;\r\n           ServicePointManager.Expect100Continue = false;\r\n           SingleTransferContext context = new SingleTransferContext\r\n           {\r\n              LogLevel = Microsoft.Azure.Storage.LogLevel.Warning\r\n           };\r\n\r\n           var stopwatch = Stopwatch.StartNew();\r\n           await TransferManager.UploadAsync(sourcePath, blockBlob, null, context, CancellationToken.None);\r\n           stopwatch.Stop();\r\n           \r\n           Console.WriteLine(&quot;Time elapsed: {0:hh\\\\:mm\\\\:ss}&quot;, stopwatch.Elapsed);\r\n           return blockBlob.Uri;\r\n        }\r\n        catch (StorageException ex)\r\n        { \r\n           throw new AzureStorageDataMovementException($&quot;Error while uploading blob to container {containerName}.&quot;, ex); \r\n        }\r\n     }\r\n \r\n     private static string EncodeFileNameToBase64(string fileName)\r\n     {\r\n        var originBytes = Encoding.UTF8.GetBytes(fileName);\r\n        return Convert.ToBase64String(originBytes);\r\n     }\r\n  }\r\n}\r\n<\/pre>\n<p>Y ejecutando nuestro programa modificado, obtenemos la siguiente salida<\/p>\n<p><div id=\"attachment_1136\" style=\"width: 875px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementEnhanced.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1136\" class=\"wp-image-1136\" title=\"Tiempo de subida del archivo al Blob, 4 segundos\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementEnhanced-300x51.png\" alt=\"Tiempo de subida del archivo al Blob, 4 segundos\" width=\"865\" height=\"147\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementEnhanced-300x51.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/AzureStorageDataMovementEnhanced.png 567w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/a><p id=\"caption-attachment-1136\" class=\"wp-caption-text\">Tiempo de subida del archivo al Blob, 4 segundos<\/p><\/div><\/p>\n<p>Size of MyLargePDF.pdf: 73303135 bytes<br \/>\nTime elapsed: 00:00:04<br \/>\nThe new Azure Blob File id: https:\/\/xxxxxxxx.blob.core.windows.net\/docs1\/testAzureStorageDataMovement\/56ae3f2d-c555-472a-a220c3346142.pdf<\/p>\n<p>Ahora ha tardado 4 segundos en subir el archivo a nuestro Blob. Es una mejora muy significativa \u00bfverdad?<\/p>\n<h2>Ya, pero \u00bfpuedes comentarnos algo de las modificaciones realizadas?<\/h2>\n<p>\u00a1Por supuesto! Os explico algunos detalles de las modificaciones.<\/p>\n<ul>\n<li><strong>Configurations.ParallelOperations<\/strong><\/li>\n<\/ul>\n<p>Establecemos el n\u00famero de operaciones paralelas que podemos realizar.<\/p>\n<ul>\n<li><strong>ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 8<\/strong><\/li>\n<\/ul>\n<p>De forma predeterminada, el l\u00edmite de conexi\u00f3n HTTP .Net es 2. Esto implica que solo se pueden mantener dos conexiones simult\u00e1neas, cosa que impide que m\u00e1s conexiones paralelas accedan al almacenamiento de blobs de Azure desde su aplicaci\u00f3n.<\/p>\n<p>Para tener un rendimiento comparable cuando usamos Data Movement Library con nuestro amado <strong>AzCopy<\/strong>, es recomendable que establezca tambi\u00e9n este valor, ya que por defecto <strong>AzCopy<\/strong> establece <strong>ServicePointManager.DefaultConnectionLimit <\/strong>al mismo valor que estamos indicando en nuestro c\u00f3digo.<\/p>\n<ul>\n<li><strong>Expect100Continue = <\/strong><strong>false<\/strong><strong>;<\/strong><\/li>\n<\/ul>\n<p>Expect100Continue esencialmente env\u00eda un encabezado <strong>Expect<\/strong> al servidor para preguntar si es probable que \u00e9ste acepte la solicitud de verbos <strong>POST, PUT y PATCH<\/strong><\/p>\n<p>Si el servidor dice que no lo har\u00e1 por cualquier motivo (por ejemplo, <strong>401 Unauthorized<\/strong>), el paquete no se env\u00eda y la solicitud simplemente devuelve la respuesta de rechazo al cliente.<\/p>\n<p>Si el servidor dice que acepta la solicitud, entonces devuelve una respuesta <strong>100-Continue <\/strong>y el cliente env\u00eda el paquete.<\/p>\n<p>Este mecanismo permite a los clientes evitar el env\u00edo de grandes cantidades de datos a trav\u00e9s de la red cuando el servidor, bas\u00e1ndose en los encabezados de solicitud, intenta rechazar una solicitud.<\/p>\n<p>Sin embargo, una vez que se recibe todo el payload en el servidor, a\u00fan pueden ocurrir otros errores. El SDK de Microsoft Azure est\u00e1 lo suficientemente bien probado como para asegurarnos que no est\u00e1 enviando solicitudes incorrectas, por lo que podemos desactivar <strong>100-Continue<\/strong> para que la solicitud completa se env\u00ede en un solo viaje.<\/p>\n<h2>CONCLUSIONES<\/h2>\n<p>Como podemos ver en los tiempos obtenidos, utilizando el paquete Nuget <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Azure.Storage.DataMovement\/\">Microsoft.Azure.Storage.DataMovement<\/a>, permite enviar grandes cantidades de datos de una forma muy eficiente y r\u00e1pida.<\/p>\n<p>HAPPY CODING!<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>En muchas aplicaciones modernas tenemos la necesidad de realizar cargas de archivos grandes a Azure. En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":185,"featured_media":1156,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,4],"tags":[],"class_list":["post-1114","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-microsoft-azure"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure | ENCAMINA<\/title>\n<meta name=\"description\" content=\"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure\" \/>\n<meta property=\"og:description\" content=\"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-18T06:48:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-07-18T09:51:06+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1905\" \/>\n\t<meta property=\"og:image:height\" content=\"1286\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sergio Parra Guerra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergio Parra Guerra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/\"},\"author\":{\"name\":\"Sergio Parra Guerra\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"headline\":\"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure\",\"datePublished\":\"2019-07-18T06:48:00+00:00\",\"dateModified\":\"2019-07-18T09:51:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/\"},\"wordCount\":1140,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/07\\\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\",\"articleSection\":[\".NET\",\"Microsoft Azure\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/\",\"name\":\"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/07\\\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\",\"datePublished\":\"2019-07-18T06:48:00+00:00\",\"dateModified\":\"2019-07-18T09:51:06+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"description\":\"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/07\\\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2019\\\/07\\\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg\",\"width\":1905,\"height\":1286},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\",\"name\":\"Sergio Parra Guerra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"caption\":\"Sergio Parra Guerra\"},\"description\":\"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/sparra\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure | ENCAMINA","description":"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure","og_description":"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.","og_url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2019-07-18T06:48:00+00:00","article_modified_time":"2019-07-18T09:51:06+00:00","og_image":[{"width":1905,"height":1286,"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg","type":"image\/jpeg"}],"author":"Sergio Parra Guerra","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sergio Parra Guerra","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/"},"author":{"name":"Sergio Parra Guerra","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"headline":"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure","datePublished":"2019-07-18T06:48:00+00:00","dateModified":"2019-07-18T09:51:06+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/"},"wordCount":1140,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg","articleSection":[".NET","Microsoft Azure"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/","url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/","name":"C\u00f3mo dar alas a tu aplicaci\u00f3n a la hora de subir archivos a Azure | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg","datePublished":"2019-07-18T06:48:00+00:00","dateModified":"2019-07-18T09:51:06+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"description":"En este post veremos c\u00f3mo dar alas a tu aplicaci\u00f3n para subir archivos a la nube y llevarla a otro nivel.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-dar-alas-a-tu-aplicacion-a-la-hora-de-subir-archivos-a-azure\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2019\/07\/C\u00f3mo-da-alas-a-tu-aplicaci\u00f3n.jpg","width":1905,"height":1286},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b","name":"Sergio Parra Guerra","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","caption":"Sergio Parra Guerra"},"description":"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/sparra\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/185"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=1114"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1114\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/1156"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=1114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=1114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=1114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}