ASP .NET Core - Gerando e Salvando QR Code - II


Hoje veremos como gerar e também salvar os arquivos QR Code na ASP .NET Core MVC.

Continuando a primeira parte do artigo veremos como salvar os arquivos QR Code gerados.

Podemos facilmente salvar os arquivos QR Code gerados. Esses arquivos possuem a extensão .qrr e veremos como fazer isso a seguir.

Salvando os arquivos QR Code

Abra o controlador QRCodeController criado no projeto e ajuste o código do método [HttpPost]Index incluindo as linhas de código destacadas em azul abaixo:

    public class QRCodeController : Controller
    {
       ...        
        [HttpPost]
        public IActionResult Index(string qrTexto)
        {
            QRCodeGenerator qrGerador = new QRCodeGenerator();
            QRCodeData qrCodeData = qrGerador.CreateQrCode(qrTexto,QRCodeGenerator.ECCLevel.Q);
            string arquivoGuid = Guid.NewGuid().ToString().Substring(0, 4);
            qrCodeData.SaveRawData("wwwroot/qrr/arquivo-" + arquivoGuid + ".qrr",
                   QRCodeData.Compression.Uncompressed);
            QRCodeData qrCodeData1 = new QRCodeData("wwwroot/qrr/arquivo-" + arquivoGuid + ".qrr", 
                QRCodeData.Compression.Uncompressed);
            QRCode qrCode = new QRCode(qrCodeData1);
            Bitmap qrCodeImage = qrCode.GetGraphic(20);
            return View(BitmapToBytes(qrCodeImage));
        }
        ...

Neste código o método Action [HttpPost] Index agora vai gerar os arquivos de QR Code gerados na pasta wwwroot/qrr com o nome 'arquivo-' mais o número GUID e a extensão .qrr.

Nota: Crie a pasta qrr dentro da pasta wwwroot do projeto.

Após o arquivo ser criado lemos o arquivo e o salvamos no website, e, a seguir convertemos para bitmap conforme anteriormente.

O código da view Index.cshtml da pasta QRCode não sofre alteração alguma.

Lendo os arquivos QR Code

Para ler os arquivos gerados na pasta wwwroot/qrr vamos criar o método Action ViewFile() no controlador QRCodeController com o código abaixo:

       public IActionResult ViewFile()
        {
            List<KeyValuePair<string, Byte[]>> fileData = new List<KeyValuePair<string, byte[]>>();
            KeyValuePair<string, Byte[]> data;
            string[] files = Directory.GetFiles("wwwroot/qrr");
            foreach (string file in files)
            {
                QRCodeData qrCodeData = new QRCodeData(file, QRCodeData.Compression.Uncompressed);
                QRCode qrCode = new QRCode(qrCodeData);
                Bitmap qrCodeImage = qrCode.GetGraphic(20);
                Byte[] byteData = BitmapToBytes(qrCodeImage);
                data = new KeyValuePair<string, Byte[]>(Path.GetFileName(file), byteData);
                fileData.Add(data);
            }
            return View(fileData);
        }

Neste código os arquivos são lidos da pasta wwwroot/qrr usando o código :  Directory.GetFiles("wwwroot/qrr"); e o objeto é retornado para a View ao final.

Para visualizar os arquivos vamos criar a view ViewFile.cshtml na pasta QRCode com o seguinte código:

@model List<KeyValuePair<string, Byte[]>>
@{
    Layout = null;
}
  <!DOCTYPE html>
  <html>
  <head>
    <meta name="viewport" content="width=device-width" />
    <title>Lendo arquivos QR Code</title>
  </head>
  <body>
    <div class="container">
      <div id="content">
        <h1>Lendo arquivos QR Code</h1>
        <div id="viewContent">
          <table>
            <tbody>
              @foreach (KeyValuePair<string, Byte[]> k in Model) {
                <tr>
                  <td>
                    <img src="@String.Format(" data:image/png;base64,{0} ",
                             Convert.ToBase64String(k.Value))" />
                    <span>@k.Key</span>
                  </td>
                </tr>
                }
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </body>
  </html>

Agora vamos incluir  um link no arquivo _Layout.cshtml para ler os arquivos gerados:

...
 <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
   <ul class="navbar-nav flex-grow-1">
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
    </li>
    <li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-controller="QRCode" asp-action="Index">Gerar QR Code</a>
   </li>
    <li class="nav-item">
     <a class="nav-link text-dark" asp-area="" asp-controller="QRCode" asp-action="ViewFile">Ler QR Code</a>
   </li>
  </ul>
 </div>
...

Executando o projeto iremos obter:

Pegue o código completo do projeto aqui:  Aspc_QRCode.zip

"Mas eu confio na tua benignidade; na tua salvação se alegrará o meu coração.
Cantarei ao Senhor, porquanto me tem feito muito bem."
Salmos 13:5,6

Referências:

  • Seção VB .NET do Site Macoratti.net

  • Super DVD .NET - A sua porta de entrada na plataforma .NET

  • Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#

  • Seção C# do site Macoratti.net

  • Seção Visual Basic do site Macoratti .net

  • VB .NET - Gerando, Salvando e lendo QRCode - Macoratti

  • ASP .NET - Gerando QRCode com a API do Google - Macoratti

  • C# - Gerando QRCode - Macoratti


José Carlos Macoratti