Dúvida com arquivos dentro do banco de dados

Banco de Dados

06/05/2021

Pessoal bom dia, tudo bem? espero que sim!

Preciso de uma ajuda, peguei um banco de dados para trabalhar e acredito que o esquema dele era bem antigo, porque normalmente os arquivos são guardados no banco de dados pelo caminho deles, mas nesse caso, não foram guardados dessa forma. Foram guardados com o que se parece com o código de conteúdo do arquivo, tenho várias mas não consigo abrir nenhum. Já tentei colocar no notepad++ o conteúdo e salvar como a extensão do arquivo mas dá erro na hora de abrir.

Segue o código de uma imagem por exemplo:

?PNG  IHDRV???|usRGB???gAMA?? ?a pHYs???o?d??IDATx^??xG?????????\?w?aZ?rxw??M? ?I6??!13?-33J?-[[???,[`dKFIf????????g4?H??? ..."

Tem mais um conteúdo pela frente, teve alguns caracteres que são inválidos mas o notepad++ reconhece eles, alguma ideia de como consigo abrir esses arquivo?
Jonathan

Jonathan

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

06/05/2021

não guardaram o caminho, guardaram o próprio arquivo.
isso é bom para o caso de backup e/ou de trocar o servidor: basta levar o banco, sem precisar se preocupar com arquivos 'agregados'.

?PNG  IHDRV???|usRGB???gAMA?? ?a pHYs???o?d??IDATx^??xG?????????\\?w?aZ?rxw??M? ?I6??!13?-33J?-[[???,[`dKFIf????????g4?H??? ..."

tente o seguinte, para o caso apontado acima:

- pegue o conteudo do campo exatamente como está gravado (todo o conteúdo)
- jogue esse conteúdo em um novo (em branco) arquivo no notepad++
- salve o arquivo como TESTE.PNG
- feche o arquivo no notepad++
- dê um duplo-clique no arquivo TESTE.PNG



GOSTEI 0
Jonathan

Jonathan

06/05/2021

não guardaram o caminho, guardaram o próprio arquivo.
isso é bom para o caso de backup e/ou de trocar o servidor: basta levar o banco, sem precisar se preocupar com arquivos 'agregados'.

?PNG  IHDRV???|usRGB???gAMA?? ?a pHYs???o?d??IDATx^??xG?????????\\\\?w?aZ?rxw??M? ?I6??!13?-33J?-[[???,[`dKFIf????????g4?H??? ..."

tente o seguinte, para o caso apontado acima:

- pegue o conteudo do campo exatamente como está gravado (todo o conteúdo)
- jogue esse conteúdo em um novo (em branco) arquivo no notepad++
- salve o arquivo como TESTE.PNG
- feche o arquivo no notepad++
- dê um duplo-clique no arquivo TESTE.PNG



Tentei isso mas mesmo assim gera um erro, que não há suporte para esse tipo de arquivo, testei pelo visualizador de fotos do windows 10, testei pelo app do paint, todos geram o mesmo erro. Tentei também abrir arquivo pdf e ele aponta um erro informando que não foi possível abrir o arquivo ou ele está corrompido.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/05/2021

você não disse que sgbdr usa, então vão duas dicas pra tentar no SQL Server:

https://sqlrambling.net/2020/04/04/saving-and-extracting-blob-data-basic-examples/

https://www.jitendrazaa.com/blog/sql/sqlserver/export-documents-saved-as-blob-binary-from-sql-server/

GOSTEI 0
Chromusmaster

Chromusmaster

06/05/2021

você não disse que sgbdr usa, então vão duas dicas pra tentar no SQL Server:

https://sqlrambling.net/2020/04/04/saving-and-extracting-blob-data-basic-examples/

https://www.jitendrazaa.com/blog/sql/sqlserver/export-documents-saved-as-blob-binary-from-sql-server/



Tenho uma procedure que faz essa extração. Colocar ela aqui:

CREATE OR ALTER FUNCTION EXPORTAIMAGEM(@IDIMAGEM uniqueidentifier)
RETURNS NVARCHAR(MAX)
as
BEGIN
EXEC master.dbo.xp_cmdshell 'md c:\\EXPORTA';
DECLARE @pctStr INT;
DECLARE @image VARBINARY(MAX);
DECLARE @MENSAGEM NVARCHAR(MAX);
Declare @CreatedDate date;
SET @image= ('SUA QUERY DE BUSCA NA TABELA E NO CAMPO DE IMAGENS VEM AQUI'=@IDIMAGEM)
SET @CreatedDate=('SUA QUERY DE BUSCA NA TABELA E NO CAMPO DE DATA DE CRIACAO VEM AQUI=@IDIMAGEM);
DECLARE @filePath NVARCHAR(MAX)
SET @filePath = 'C:\\EXPORTA\\'+CONVERT(nvarchar(MAX),YEAR(@CreatedDate))+'_'+CONVERT(nvarchar(MAX),Month(@CreatedDate))+'_'+CONVERT(nvarchar(MAX),@IDIMAGEM)+'.jpg'
EXEC sp_OACreate 'ADODB.Stream', @pctStr OUTPUT
EXEC sp_OASetProperty @pctStr, 'Type', 1
EXEC sp_OAMethod @pctStr, 'Open'
EXEC sp_OAMethod @pctStr,  'Write', NULL, @image
EXEC sp_OAMethod @pctStr, 'SaveToFile', NULL,@filePath, 2
EXEC sp_OAMethod @pctStr, 'Close'
EXEC sp_OADestroy @pctStr
SET @MENSAGEM=(SELECT CASE WHEN @IMAGE IS NULL THEN 'Imagem_'+ CONVERT(nvarchar(MAX),@IDIMAGEM) +'.jpg' +' ERRO! VERIFIQUE SE A IMAGEM EXISTE CADASTRADA NO BANCO DE DADOS!'
    ELSE 'Imagem_'+CONVERT(nvarchar(MAX),@IDIMAGEM)+'.jpg_SUCESSO!'
    END)
	RETURN @MENSAGEM
END

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/05/2021

essa function do Chromusmaster deve atender à sua necessidade, Jonathan.

você só precisa ser atentar ao fato de que a function grava o arquivo com extensao jpg e no caso que você apresentou deve ser png

GOSTEI 0
POSTAR