{"id":978,"date":"2020-11-23T17:44:31","date_gmt":"2020-11-23T17:44:31","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=978"},"modified":"2020-11-24T08:39:00","modified_gmt":"2020-11-24T08:39:00","slug":"descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas-sdk-v12","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas-sdk-v12\/","title":{"rendered":"Descargar archivos grandes desde Azure Storage con Firmas de acceso compartido (SAS) &#8211; SDK v12"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Si bien el funcionamiento es <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas\/\" data-type=\"URL\" data-id=\"https:\/\/www.mainmind.com\/blog\/descargar-archivos-grandes-desde-azure-storage-con-firmas-de-acceso-compartido-sas\/\" target=\"_blank\">similar a la v11<\/a>, se utiliza la librer\u00eda <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/tree\/Azure.Storage.Blobs_12.7.0\/sdk\/storage\/Azure.Storage.Blobs\" data-type=\"URL\" data-id=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/tree\/Azure.Storage.Blobs_12.7.0\/sdk\/storage\/Azure.Storage.Blobs\" target=\"_blank\">Azure.Storage.Blobs<\/a> de c\u00f3digo abierto en lugar del paquete <a rel=\"noreferrer noopener\" href=\"https:\/\/www.nuget.org\/packages\/WindowsAzure.Storage\/\" data-type=\"URL\" data-id=\"https:\/\/www.nuget.org\/packages\/WindowsAzure.Storage\/\" target=\"_blank\">WindowsAzure.Storage<\/a>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nAccountSasBuilder sasBuilder = new AccountSasBuilder()\n{\n    Services = AccountSasServices.Blobs | AccountSasServices.Files,\n    ResourceTypes = AccountSasResourceTypes.All,\n    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),\n    Protocol = SasProtocol.Https\n};\n\nsasBuilder.SetPermissions(AccountSasPermissions.Read); \/\/ | AccountSasPermissions.Write\n\nStorageSharedKeyCredential key = new StorageSharedKeyCredential(&quot;MiNombreDeCuenta&quot;,&quot;MiClaveDeCuenta&quot;));\n\n\/\/ Generar a partir de la clave de acceso, el token SAS:\nstring sasToken = sasBuilder.ToSasQueryParameters(key).ToString();\n\n\/\/ Generar la direcci\u00f3n URL completa incluyendo el token SAS:\nUriBuilder fullUri = new UriBuilder()\n{\n    Scheme = &quot;https&quot;,\n    Host = string.Format(&quot;{0}.blob.core.windows.net&quot;, CloudConfigurationManager.GetSetting(&quot;accountName&quot;)),\n    Path = string.Format(&quot;{0}\/{1}&quot;, nombreContainer, nombreArchivo),\n    Query = sasToken\n};\n\t\t\t\t\nResponse.Redirect(fullUri.Uri)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">De este modo mantenemos de forma m\u00e1s segura el acceso a ficheros dentro de containers con control de tiempo de expiraci\u00f3n y permisos de usuario.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si bien el funcionamiento es similar a la v11, se utiliza la librer\u00eda Azure.Storage.Blobs de c\u00f3digo abierto en lugar del paquete WindowsAzure.Storage: De este modo mantenemos de forma m\u00e1s segura el acceso a ficheros dentro de containers con control de tiempo de expiraci\u00f3n y permisos de usuario.<\/p>\n","protected":false},"author":1,"featured_media":980,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[680,681,297,682],"class_list":["post-978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-azure-storage-blobs","tag-blobs","tag-sas","tag-shared-access-signature"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/978","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=978"}],"version-history":[{"count":0,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/978\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media\/980"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}