¿Qué es Azure File Share?

Azure File Share es un servicio de azure que ofrece recursos compartidos de archivos administrados en la nube.

Os voy a explicar como crear el recurso en el portal de azure y luego como implementarlo en nuestro proyecto.

Portal de Azure

Lo primero que deberemos hacer es crear una cuenta de almacenamiento de azure.

1

Debemos elegir un grupo de recursos y darle un nombre a la cuenta, las demás opciones las podemos dejar como están por defecto. A continuación, procedemos a validar y crear.

2

Después, entramos en la cuenta de almacenamiento y seleccionamos File Shares (Recursos compartidos de archivos).

3

Seleccionamos añadir, y le damos un nombre. La cuota sirve para definir el tamaño máximo de archivos que puede haber en el File Share, y dejamos la opción de transacción optimizada.

4

Por último, en la cuenta de almacenamiento, vamos a Access Keys (Claves de acceso), y copiamos la cadena de conexión para usarla en nuestro proyecto.

5

Visual Studio

Lo primero, creamos un proyecto nuevo de ASP.NET Core, en el cuál tendremos que instalar el NuGet Azure.Storage.Files.Shares.

7

En appsettings.json añadimos la cadena de conexión de la cuenta de almacenamiento.

6

A continuación, creamos la carpeta Services, y añadimos una clase llamada ServiceFileShare.

Y dentro de la clase, lo primero será hacer un using a Azure.Storage.Files.Shares.

using Azure.Storage.Files.Shares;

La clase debe tener un ShareDirectoryClient y lo inicializamos de la siguiente manera:

5

«con» es la clave de acceso, y se lo inyectaremos después, desde el Startup, y en «filesharegsr» ponemos el nombre que le hayamos puesto al File Share en azure.

A continuación, hacemos métodos para subir, borrar, leer y recuperar todos los ficheros.

2

Lo siguiente será inyectar la cadena de conexión de la cuenta de almacenamiento al Service desde el startup.

1

Por último, creamos el controlador y sus vistas:

  • FileShareController
public class FileShareController : Controller
    {
        ServiceFileShare servicefiles;

        public FileShareController(ServiceFileShare servicefiles)
        {
            this.servicefiles = servicefiles;
        }

        public async Task<IActionResult> Index(String filename)
        {
            if (filename != null)
            {
                String content =
                    await this.servicefiles.GetFileContentAsync(filename);
                ViewData["CONTENT"] = content;
            }
            List<String> files =await this.servicefiles.GetFilesAsync();
            return View(files);
        }

        public IActionResult UploadFile()
        {
            return View();
        }

        [HttpPost]
        public async Task<IActionResult> UploadFile(IFormFile file)
        {
            String filename = file.FileName;
            using (var stream = file.OpenReadStream())
            {
                await this.servicefiles.UploadFileAsync(filename, stream);
            }
            ViewData["MENSAJE"] = "Archivo subido correctamente";
            return View();
        }

        public async Task<IActionResult> DeleteFile(String filename)
        {
            await this.servicefiles.DeleteFileAsync(filename);
            return RedirectToAction("Index");
        }
    }
  • Vista Index
@model List<String>
<h1>Azure File Share</h1>

<a asp-controller="FileShare"
   asp-action="Subir">
    Subir archivo
</a>

<ul class="list-group">
    @foreach (String nom in Model)
    {
        <li class="list-group-item">
            @nom 
            <a asp-controller="FileShare" class="btn btn-info"
               asp-action="Index"
               asp-route-filename="@nom">
                Leer
            </a>
            <a asp-controller="FileShare" class="btn btn-danger"
                asp-action="Eliminar"
                asp-route-filename="@nom">
                Eliminar
            </a>
        </li>
    }
</ul>
<p style="color:blue">@ViewData["TEXTO"]</p>
  • Vista Subir
<h1>Upload File Azure</h1>

<a asp-controller="FileShare" asp-action="Index">
    Volver
</a>

<form enctype="multipart/form-data" method="post">
    <input type="file" name="file"
           class="form-control"/>
    <button type="submit" class="btn btn-info">
        Subir
    </button>
</form>

Y quedaría de la siguiente forma:

4
  • Autor: George Francis Shinner Rodríguez
  • Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
  • Centro: Tajamar
  • Año académico: 2020-2021
  • Código: GitHub

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.