BLOB e OLE Container

mercoledì 18 gennaio 2006 - 19.09

Ciciu Profilo | Senior Member

Ciao a tutti.

Ho un problema... (Beh, questo è chiaro : se non ce l'avessi, forse, non Vi scriverei...)

Ho una tabella Oracle, che contiene due campi : una chiave ed un campo BLOB. Il campo BLOB contiene svariati tipi di files (in prevalenza Zip, Doc e PDF) inseriti come oggetti OLE da un'applicazione scritta in Uniface (un 4GL...).

Il sopraccitao linguaggio permette di inserire ed estrarre "manualmente" questi files... Questo significa che un double-click sul campo che, sulla form, è collegato al campo BLOB (visto come OLE Container), lancia l'applicazione associata al file (quinWinZip, Word o Acrobat Reader), a patto che, ovviamente, questa sia registrata sulla macchina che esegue l'applicazione.

Il problema : devo estrarre questi files dal database e salvarli su disco.
Il dramma : Uniface NON permette di effettuare questa operazione in modalità automatica (è necessario l'intervento dell'Utente che, manualmente, apre e salva ogni singolo file...).

Ho provato a creare un banale programmino in c# che legge il contenuto del campo BLOB e lo scrive su file... Il solo problema è che il file scritto su disco, ovviamente, NON è un file del tipo dichiarato : l'estrazione di un PDF dal campo BLOB non è un file PDF, ma è l'esplosione (se così vogliamo chiamarla) di un oggetto OLE...

Posso supporre che, anche se l'oggetto OLE è stato scritto da una applicazione diversa da quella con cui lo leggo, esista la possibilità di ottenere un oggetto "utilizzabile"... Ma come ?

Avete qualche buon riferimento da darmi ?

Ciao - Grazie
Fabio G

Ciciu Profilo | Senior Member

Ciao a tutti.

Dunque, ho fatto una scoperta "sensazionale"...

Ho confrontato un file PDF salvato su file system con uno estratto da BLOB (salvandolo con un banale dump su file)...

La differenza, banalmente, consiste in alcune info aggiunte in testa ed altre aggiunte in coda !!!! E' sufficiente eliminare queste informazioni e... voilà, les jeux sont fait !

Grazie comunque per l'interessamento.

Ciao - Fabio G

PS - Il link che mi hai fornito è sicuramente utile, come lo sono tutte le risorse che sto trovando su questo sito !!!!

Fabio G

Brainkiller Profilo | Guru

>Ciao a tutti.
>
>Dunque, ho fatto una scoperta "sensazionale"...
>
>Ho confrontato un file PDF salvato su file system con uno estratto
>da BLOB (salvandolo con un banale dump su file)...
>
>La differenza, banalmente, consiste in alcune info aggiunte in
>testa ed altre aggiunte in coda !!!! E' sufficiente eliminare
>queste informazioni e... voilà, les jeux sont fait !

Evidentemente l'altro software scrive i file aggiugnendo dei meta dati utili a lui per qualche cosa.
Se tu estrapoli il dato con un altro software ti tiri dietro anche i meta dati che bisogna eliminare prima di avere il file originale ufficiale.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Ciciu Profilo | Senior Member

Già...

Credo che il discorso sia comunque legato al Server COM... Immagino che queste siano le caratteristiche di un oggetto OLE PDF... Ho provato a fare lo stesso confronto con un file di Word, ed il risultato è deludente (per me) : sono due file completamente diversi...

Per ora, l'emergenza è risolta (più che altro con un colpo di immensa fortuna...).

E' comunque una buona lezione. Quando si decide di inserire dati in un DB, è sempre bene verificare la possibilità di estrarli (anche in modalità automatica, o batch se preferite...). Continuo a chiedermi chi sia stato il genio che ha creato una procedura del genere...

Cmq, grazie ancora una volta per l'aiuto e la disponibilita !

Saluti a tutti...

Fabio G

Brainkiller Profilo | Guru

>E' comunque una buona lezione. Quando si decide di inserire dati
>in un DB, è sempre bene verificare la possibilità di estrarli
>(anche in modalità automatica, o batch se preferite...). Continuo
>a chiedermi chi sia stato il genio che ha creato una procedura
> del genere...

Beh si è normale.
Di solito però il modo per immagazzinare i dati è standard a livello di DB. Se però un software come detto prima, particolare vuole aggiungere altri dati è normale poi che si trasformi in un algoritmo di salvataggio proprietario. (potrebbero essere anche criptati volendo).

Se non ci sono di mezzo cose di questo tipo, qualunque applicazione, in qualunque linguaggio può estrarre correttamente dati BLOB dal DB.

ciao
alla prossima.


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Devil Profilo | Junior Member

Ciao..sono in un problema simile, ho esportato delle immagini da access ma ricevo un errore se apro questi file.

Quali sono i metadati da eliminare?

grazie Ciao

Brainkiller Profilo | Guru

>Ciao..sono in un problema simile, ho esportato delle immagini
>da access ma ricevo un errore se apro questi file.
>Quali sono i metadati da eliminare?

Ciao,
beh bisognerebbe anche sapere come sono stati caricati questi dati binari dentro Access e anche in che formato sono prima di poter capire perchè non si aprono.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Devil Profilo | Junior Member

Ciao,
sono in formato jpg...e sono state messe dentro con uno spudorato copia incolla..cioè nella maschera in cui c'è l'area collegata con il campo immagine viene incollata l'immagine stessa.

Ciò che ottengo è un file che però ho il sospetto contenga anche i metadati che access usa per memorizzare gli oggetto blob e forse questo da qualche problema.

Come fare per ottenere il file esatto?

Brainkiller Profilo | Guru

>Ciao,
>sono in formato jpg...e sono state messe dentro con uno spudorato
>copia incolla..cioè nella maschera in cui c'è l'area collegata
>con il campo immagine viene incollata l'immagine stessa.

Esatto, allora mi sa che sono salvati in modo diverso.
La procedura per caricarli da codice .NET è un po' diversa bisogna leggere i byte del file e caricarli dentro in modalità raw. Procedura contraria per rileggerli.

>Ciò che ottengo è un file che però ho il sospetto contenga anche
>i metadati che access usa per memorizzare gli oggetto blob e
>forse questo da qualche problema.

Ma tu ora come fai ad estrarli ?

Una volta estratto prova ad aprire il file con il notepad. Se sono JPG dovresti vedere come primi 3 caratteri i seguenti:
ÿØÿ

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Devil Profilo | Junior Member

questo è la parte iniziale se estraggo con access97 (procedura con getchunk descritta da microsoft)

     ÿÿÿÿImmagine  
METAFILEPICT ª ]îÿÿ¼  ª£  Þ òÝ    ÉÒòÝ C Ì ¨ á ÉÒ ( á ¨    » ¯ ¯ §€l§€m§i«„k¬…l¥‚j¦k§}m§}mª€q©‚n¨ƒlª…m­„o®…p¬ƒo©€k´Šv²‰t¯†q­„o®ƒs°‡sªƒo¨‚o¦€l£€j¡n¡‚qŸ€n¡s¢€n§„s¥s¢€n¥‚q¤‚r s›r£€}É«®Í¦¤àÈÐǺà†~ÎZ_³+:~V?0ŠmXœyZ‘sV=*(J8/^F>91'"&!<(a(a&_'b!,SE:BSDl i\#\"(m%i
&j
'i'k-v5ƒ2‚3€(q $l%m $m "k!h \OW

ed ecco lo stesso risultato se utilizzo il codice che hai scritto tu con lo stream (sei Davide giusto?)

     ÿÿÿÿImmagine  
METAFILEPICT ª ]îÿÿ¼  ª£  Þ òÝ    ÉÒòÝ C Ì ¨ á ÉÒ ( á ¨    » ¯ ¯ §€l§€m§i«„k¬…l¥‚j¦k§}m§}mª€q©‚n¨ƒlª…m­„o®…p¬ƒo©€k´Šv²‰t¯†q­„o®ƒs°‡sªƒo¨‚o¦€l£€j¡n¡‚qŸ€n¡s¢€n§„s¥s¢€n¥‚q¤‚r s›r£€}É«®Í¦¤àÈÐǺà†~ÎZ_³+:~V?0ŠmXœyZ‘sV=*(J8/^F>91'"&!<(a(a&_'b!,SE:BSDl i\#\"(m%i
&j
'i'k-v5ƒ2‚3€(q $l%m $m "k!h \OW

cosa significa "leggere i byte del file e caricarli dentro in modalità raw" puoi essere più chiaro?
oppure se riesci indicami parti di codice o link da consultare.

Come mai io trovo queste difficoltà mentre in rete ho letto commenti di persone molto soddisfatte e che sono riuscite nell'intento?

Pensa che devo fare poi anche un'altro lavoro che consiste nell'inserire in un campo image di una tabella in sql server delle immagini...proverò con la prima parte del codice che ho trovato sempre nell'esempio che ho letto questa mattina.


Iniziamo comunque con un problema alla volta...consigli?



Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5