16/09/2010 Development / asp3

O problema: Um cliente solicitou que determinados arquivos nao poderiam ser baixados pelo usuario diretamente atraves da URL do browser. Ex: Um documento Word, o usuario clica com o botao direito no link e Salvar como. 

O desafio: Criar um mecanismo que bloqueasse o download, mas ao mesmo tempo, o usuario tivesse acesso ao conteudo.

A solucao: Assim que o administrador do sistema faz o upload do arquivo para a aplicacao, o arquivo fica salvo no banco de dados em formato binario, e o arquivo original eh excluido do servidor. Quando solicitado o conteudo, o script leh o formato binario e atraves do content-type setado, o registro eh visualizado.

Mas dae, tuh fica pensando, grande merda, hehehehe...o binario esta no temporario da maquina do cara, ou no caso de uma imagem, soh dar um print na tela neh...CLARO, exatamente! Mas o fato eh que os arquivos estavam sendo linkados em outra pagina, de outro site, e agora os arquivos tem nome randomicos, ou seja, naum existem, soh acessando a pagina mesmo ;-)

Segue o script abaixo!

'*************************************************************
'TRANFORMANDO O ARQUIVO NO FORMATO BINARIO
'DECLARANDO VARIAVEIS
Dim ObjStr
Dim ds_addr_imagem
Dim varBuffer
Dim Ors
Dim oConn

'CRIANDO O OBJETO "STREAM"
Set ObjStr = Server.CreateObject("ADODB.Stream")

'INDICANDO O ENDEREÇO DA IMAGEM
ds_addr_imagem = Server.MapPath("17910-rs.jpg")

'INDICA O TIPO DE DADO QUE O OBJETO DEVERÁ LER
ObjStr.Type = 1'‘AdBinary – Binário

'ABRE O OBJETO
ObjStr.Open

'LE INFORMAÇÕES DO ARQUIVO
ObjStr.LoadFromFile ds_addr_imagem

'DECARREGA INFORMAÇÕES NA VARIAVEL
varBuffer = ObjStr.Read

'DESTROI O OBJETO "STREAM"
objStr.Close
Set ObjStr = nothing

'*************************************************************
'MOSTRANDO O ARQUIVO COM OUTRO NOME
Response.Buffer = True
Response.ContentType = "image/gif"
Response.AddHeader "Content-Disposition", "inline; filename =" & getRandom() & ".gif"
Response.CacheControl = "public"

Response.BinaryWrite varBuffer 

Espero que ajude!