{"id":128,"date":"2018-08-28T10:35:00","date_gmt":"2018-08-28T10:35:00","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=128"},"modified":"2020-11-23T22:18:02","modified_gmt":"2020-11-23T22:18:02","slug":"descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas\/","title":{"rendered":"Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS)"},"content":{"rendered":"<p>El almacenamiento de datos en cloud debe conllevar una pol\u00edtica de acceso y control adecuada al tipo de informaci\u00f3n. Dentro de Azure podemos utilizar direcciones de enlace temporales para operaciones con ficheros en diversos escenarios. En nuestro caso utilizaremos SAS (Shared Acces Signature) para la descarga directa de archivos de gran volumen, de esta forma adem\u00e1s de un mayor control tambien descargaremos de operaciones de entrada\/salida a nuestro servidor, permitiendo mayor rapidez de acceso.<\/p>\n<p>La direcci\u00f3n que se genera es del tipo:<\/p>\n<pre class=\"brush:html;auto-links:false;toolbar:false\" contenteditable=\"false\">https:\/\/miespacio.blob.core.windows.net\/MiContenedor\/MiFichero.zip?sv=2016-05-31&amp;sr=b&amp;sig=Kasdf8mqcgh4NMjQcRaZMTA1bSpXJrajsy404ZkDipE%3D&amp;se=2018-08-27T12%3A10%3A33Z&amp;sp=r<\/pre>\n<p>Donde distinguimos a continuaci\u00f3n de la direcci\u00f3n URI del recurso un Token formado por:<strong><br><\/strong><\/p>\n<ul>\n<li>sv: versi\u00f3n de API para ejecutar<\/li>\n<li>sr: especificamos B para un blob y C para container<\/li>\n<li>se: fecha limite a partir de la cual el enlace expira<\/li>\n<li>sp: permisos asociados, en este caso R solo de lectura<\/li>\n<\/ul>\n<p>Para ver m\u00e1s par\u00e1metros adicionales y otras opciones tienes disponible la documentaci\u00f3n completa <a href=\"https:\/\/docs.microsoft.com\/es-es\/rest\/api\/storageservices\/Constructing-a-Service-SAS?redirectedfrom=MSDN\" target=\"_blank\" rel=\"noopener noreferrer\">aqu\u00ed<\/a>.<\/p>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCloudStorageAccount cuentaAlmacen = new CloudStorageAccount(new StorageCredentials(&quot;miespacio&quot;, &quot;clave&quot;), true);\nvar blobClient = cuentaAlmacen.CreateCloudBlobClient();\n\t\t\nvar container = blobClient.GetContainerReference(&quot;MiContenedor&quot;);\nvar blob = container.GetBlockBlobReference(&quot;MiFichero.zip&quot;);\n\t\t\nvar token = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()\n    {\nPermissions = SharedAccessBlobPermissions.Read,\nSharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(60),\n    }, new SharedAccessBlobHeaders()\n    {\nContentDisposition = &quot;attachment; filename=&quot;+nombreFichero\n    });\n\nvar url = string.Format(&quot;{0}{1}&quot;, blob.Uri, token);\nResponse.Redirect(url, true);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">NOTA: la <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/storage\/blobs\/storage-quickstart-blobs-dotnet-legacy\" target=\"_blank\">versi\u00f3n 11 del SDK de Azure<\/a> est\u00e1 discontinuada, <a href=\"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas-sdk-v12\/\" data-type=\"URL\" data-id=\"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas-sdk-v12\/\" target=\"_blank\" rel=\"noreferrer noopener\">versi\u00f3n adaptada a la v12 aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El almacenamiento de datos en cloud debe conllevar una pol\u00edtica de acceso y control adecuada al tipo de informaci\u00f3n. Dentro de Azure podemos utilizar direcciones de enlace temporales para operaciones con ficheros en diversos escenarios. En nuestro caso utilizaremos SAS (Shared Acces Signature) para la descarga directa de archivos de gran volumen, de esta forma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[296,298,297,682],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-cloud","tag-azure-storage","tag-blob","tag-sas","tag-shared-access-signature"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":0,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}