Como Fazer

Use Blobs para visualizar documentos no SharePoint sem baixar

Luiz Antonio Sgargeta
- Sócio fundador e CEO da Trinapse, IA aplicada, Microsoft 365 e Power Platform
· 4 min de leitura
TRINAPSE - 3/8 - Erros comuns do Agile e como a Trinapse os previne

Em minha tarefa mais recente, enfrentei o desafio de visualizar um arquivo em um site do SharePoint. A restrição era que você não podia baixá-lo por motivos de segurança, mas precisava ser exibido em uma visualização. Tudo o que é exposto é uma API para acessar os documentos de um servidor em um local seguro e você deve visualizá-los no SharePoint online sem copiá-lo para qualquer biblioteca de documentos do SharePoint ou algo assim. Conseguimos isso usando um objeto blob. Se obtivermos os dados como um blob, usando a webpart SPFx, podemos visualizá-lo diretamente do objeto blob sem copiá-lo para qualquer local. Obviamente, nem todos os tipos de documentos podem ser visualizados usando essa abordagem. Nesses casos, para os quais os objetos blob não são suportados,

Etapas para implementar a visualização de blob:

Criar aplicativo SPFX

Primeiro, precisamos criar um aplicativo SPFX básico a partir do prompt de comando usando o comando “yo @microsoft/sharepoint” e seguir as etapas necessárias conforme mencionado neste link https://docs.microsoft.com/en-us/sharepoint/ dev/spfx/web-parts/get-started/build-a-hello-world-web-part

Conecte-se com bibliotecas

Importe as bibliotecas necessárias para conectar a API, visualizar arquivos e criar blobs conforme mostrado abaixo:

import FileViewer from ‘react-file-viewer’;

import b64toBlob from ‘b64-to-blob’;

import { HttpClient, IHttpClientOptions, HttpClientResponse } from ‘@microsoft/sp-http’;

Criar blob e URL

Obtenha o documento no formato base64 da chamada da API.

Converta os dados em blob com base no tipo de arquivo, conforme mostrado abaixo:

this.setState({ errorMessage: null, fileId: null, fileName: null, fileAuthor: null, filePath: null, fileContent: null },

  () => {

 this.callAPIWithFlow(apiTestFlowURL, this.state.fileType)

  .then((response) => {

  console.log(“api response: “, response);

  if (response[“success”] == true) {

            this.setState({

              fileId: response[“response”][“Id”],

              fileName: response[“response”][“Name”],

              fileAuthor: response[“response”][“Author”],

              fileContent: response[“response”][“body”][“$content”],

              filePath: response[“path”],

           });

  var blobImage = null;

  if (this.state.fileType == “png” || this.state.fileType ==    “tif” || this.state.fileType == “tiff” || this.state.fileType == “jpg” || this.state.fileType == “jpeg” || this.state.fileType == “snag”) {

  blobImage = b64toBlob(this.state.fileContent, “image/” + this.state.fileType);

   }

  else if (this.state.fileType == “txt”) {

         blobImage = b64toBlob(this.state.fileContent, “text/html”);

  }

else {

  blobImage = b64toBlob(this.state.fileContent, “application/octet-stream”);

    }

  this.setState({ blobUrl: URL.createObjectURL(blobImage) });

  } else {

  this.setState({ errorMessage: response[“errorMessage”] });

  }

  });

 });

Crie também a URL do blob conforme mostrado acima. Nesta fase, temos o blob pronto para visualização/download.

Documento de visualização

O trecho de código abaixo especifica como visualizamos o documento do objeto blob com base no tipo de arquivo na função de renderização do SPFX.

{this.state.fileType == ‘txt’ ?

   <div style={{ margin: 10 }}>

   <iframe src={this.state.blobUrl} id=’DocView’ width=’100%’ height =’500px’ frameBorder=’0′></iframe>

   </div>

   :

   this.state.fileType == ‘tif’ ?

   <div style={{ margin: 10 }}>

   <img src={`data:image/` + this.state.fileType + `;base64,${this.state.fileContent}`} />

    </div>

    :

   <div style={{ margin: 10, height: 400 }}>

   <FileViewer style={{ height: 400 }} fileType={this.state.fileType} filePath={this.state.blobUrl} />

  </div>

 }

Restrições

Vejamos algumas desvantagens dessa abordagem. As limitações decorrem do fato de que o Visualizador de arquivos não oferece suporte a todos os tipos de arquivo. Alguns deles podem ser manipulados por código e outros usando permissões do SharePoint.

  • Para tipos de arquivo que podem ser visualizados a partir do objeto blob, os documentos são visualizados em um iframe, conforme mostrado no último trecho de código.
  • Para tipos de arquivo que não podem ser visualizados, a única opção é fazer o download. Podemos dar permissão aos usuários para baixar os arquivos que não podem ser visualizados (principalmente arquivos que não são do escritório). Desta forma, a segurança dos documentos pode ser mantida de forma eficiente.

Exemplo de aplicativo

O exemplo abaixo tem a área de visualização na extremidade direita que exibe o visualizador de arquivos/visualização baseada em iframe, dependendo do tipo de documento selecionado na lista de documentos mostrada à esquerda. A lista de documentos é obtida a partir da chamada da API para o servidor que é fornecida pelo cliente.

Use Blobs para visualizar documentos no SharePoint sem baixar — Exemplo de aplicativo

Conclusão

Então, o que realmente temos aqui? Na maioria dos casos, pode-se usar uma API para copiar documentos em uma biblioteca de documentos onde os documentos serão armazenados e, em seguida, a visualização pode ser feita. As permissões para esta biblioteca podem ser restritivas e um usuário só pode visualizar o documento. 

O problema começa quando a API fornecida não permite que você copie o arquivo e pode ser o caso de uma preocupação crescente com confidencialidade e segurança. Nesse cenário, você pode usar o blob para renderizar uma visualização do conteúdo do arquivo sem realmente fazer o download ou fazer uma cópia dele. E, claro, depois de ter o arquivo em um blob, você pode ir mais fundo!

Veja também como listar permissões exclusivas para arquivos e pastas no SharePoint.

Luiz Antonio Sgargeta
Sócio fundador e CEO da Trinapse, IA aplicada, Microsoft 365 e Power Platform

Luiz Antonio Sgargeta é sócio fundador e CEO da Trinapse, consultoria brasileira de Microsoft 365 com quase duas décadas de operação, acumula mais de 20 anos em desenvolvimento de software e em ambientes corporativos de alta complexidade.

Ver maisVer menos

Trabalha com SharePoint desde o SharePoint Portal Server 2003 e com .NET desde a versão 1.0. Acompanhou a plataforma em todas as suas reinvenções, do portal de documentos on-premises ao SharePoint Online dentro do Microsoft 365, o que dá a ele uma leitura rara sobre o que muda de verdade e o que é apenas nome novo para o mesmo problema.

No início da carreira atuou em uma das maiores operações de e-commerce do país, em sistemas que não toleram degradação de performance nem indisponibilidade, essa origem definiu o critério que ele aplica até hoje: solução boa é a que sustenta volume real, integra com o legado que já existe e não quebra no pico.

Depois disso, passou por praticamente todo tipo de projeto corporativo, de portais e intranets de milhares de usuários a integrações críticas e automação de processos de ponta a ponta, sempre em grandes empresas e em desafios de alta exigência.

A marca do trabalho dele é a tradução entre tecnologia e negócio, levanta a necessidade real por trás do pedido do cliente, questiona o processo antes de automatizá-lo e desenha a solução pelo resultado esperado, não pela ferramenta disponível, é o que permite conversar com a diretoria sobre retorno e com o time técnico sobre arquitetura na mesma reunião.

Hoje lidera a frente comercial e estratégica da Trinapse e conduz a empresa no novo ciclo da inteligência artificial, com foco em agentes de IA e operação de processos assistida por IA para cooperativas de crédito, agronegócio e indústria. Escreve no blog da Trinapse desde 2019, com mais de 450 artigos sobre IA, SharePoint, Power Platform, Modern Workplace e transformação de processos, sempre a partir de projeto entregue e não de teoria.

LinkedIn
Compartilhar:

Precisa aplicar isso na sua empresa? Fale com nossos especialistas.

Falar com um especialista