10 messaggi dal 07 settembre 2009
{VS 2005 - 2.0 - VB)
Ciao a tutti...sto provando la lettura e la scrittura di files PDF in campi ORACLE BLOB.
Ho 2 domande semplici, sono nuovo dell' argomento gestione file.

1 - Per la scrittura ho trovato e sono riuscito in questo modo:

'Open file on disk
Dim txtFilepath As String = "Z:\TEST.PDF"

Dim fs As FileStream = New FileStream(txtFilepath, FileMode.Open, FileAccess.Read)
Dim r As BinaryReader = New BinaryReader(fs)
myConnection.Open()

Dim dati() As Byte = New Byte((fs.Length) - 1) {}
fs.Read(dati, 0, CType(fs.Length, Integer))
fs.Close()

Dim InsertCommand As String = "INSERT INTO TESTBLOB (ID, DESCRIZIONE, DATI) VALUES ('002','TESTBLOB',:PDF)"

Dim myCommand As OracleCommand = New OracleCommand(InsertCommand, myConnection)
Dim myParam As OracleParameter = myCommand.Parameters.Add("PDF", OracleType.Blob)
myParam.Value = dati

myCommand.ExecuteNonQuery()
myConnection.Close()
r.Close()
fs.Close()

A riguardo devo chiedervi: la selezione del file per ora l' ho fatta con l' oggetto FileUpload ma ho visto che NON VIENE LETTO DI DEFAULT TUTTO IL PERCORSO COMPLETO DEL FILE SELEZIONATO se da Internet Explorer (il più usato dove devo rilasciare la app) se non viene abilitata la lettura completa dei file in upload (IE - Strumenti - Opzioni - Protezione - Livello Personalizzato - Includi il percorso locale durante il caricamento dei file in server --> ATTIVA).

1 DOMANDA: C' E' UN MODO MIGLIORE CHE LEGGA TUTTO IL PERCORSO DEL FILE IN UPLOAD PER POTERLO POI INERIRE NEL DB??

---------------------------------------------

2 - Per la lettura sono riuscito ed ho trovato in questo modo:

Dim myCommand As New OracleCommand("SELECT * FROM TESTBLOB WHERE ID = '001'", myConnection)
myConnection.Open()
Dim myReader As OracleDataReader = myCommand.ExecuteReader(System.Data.CommandBehavior.Default)
Try
While myReader.Read()
Dim myLob As OracleLob = myReader.GetOracleLob(myReader.GetOrdinal("DATI"))
If Not myLob.IsNull Then
Dim FN As String = myReader.GetString(myReader.GetOrdinal("DESCRIZIONE"))
Dim fs As FileStream = New FileStream("Z:\" + FN + ".pdf", FileMode.Create)
Dim w As BinaryWriter = New BinaryWriter(fs)
w.Write(myLob.Value)
w.Close()
fs.Close()

End If
End While
Finally
myReader.Close()
myConnection.Close()
End Try

Sono riuscito ma in questo modo il file viene scritto localmente!

2 DOMANDA: C' E' MODO DI VISUALIZZARE IL FILE PDF LETTO DAL CAMPO BLOB, SENZA DOVER SCRIVERE IL FILE LOCALMENTE/IN RETE?

grazie mille a chi mi riuscirà ad aiutare!
sorigrafia wrote:
1 DOMANDA: C' E' UN MODO MIGLIORE CHE LEGGA TUTTO IL PERCORSO DEL FILE IN UPLOAD PER POTERLO POI INERIRE NEL DB??

no, se il browser non ti da' una informazione, è difficile fare diversamente.

2 DOMANDA: C' E' MODO DI VISUALIZZARE IL FILE PDF LETTO DAL CAMPO BLOB, SENZA DOVER SCRIVERE IL FILE LOCALMENTE/IN RETE?

sì, scrivilo direttamente su Response.OutputStream, che è uno stream esattamente come quello che crei con FileStream. in questo modo mandi già in output il file.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
10 messaggi dal 07 settembre 2009
Ciao, intanto ti ringrazio per la risposta.

Per il punto 2 son riuscito in questo modo:

Dim ds As New DataSet()
ds = New DataSet()
Dim [select] As String

[select] = "SELECT DATI FROM TESTBLOB WHERE ID = '001'"
Dim command As New OracleCommand([select], OracleConn)

OracleConn.Open()
Dim fileData As Byte() = DirectCast(command.ExecuteScalar(), Byte())
OracleConn.Close()

Dim wfile As System.IO.FileStream
Dim filepath As String = Request.PhysicalApplicationPath + "\" + "TEST3" + ".pdf"
wfile = New FileStream(filepath, FileMode.OpenOrCreate)
wfile.Write(fileData, 0, fileData.Length)
wfile.Close()

'Visualizza il file
Response.ContentType = "application/pdf"
Response.OutputStream.Write(fileData, 0, fileData.Length)
Response.Flush()
Response.Close()

Ora mi chiedo:
1 - Faccio tutto bene o ci sono modi migliori?
2 - il pdf me lo apre benissimo all' interno di IE ma non ho modo di tornare alla pagina precedente dalla quale clicco per leggere e visualizzare il pdf.
3 - è sempre necessario creare il file? (wfile = New FileStream(filepath, FileMode.OpenOrCreate)
Non è possibile leggere il contenuto e visualizzarlo solamente senza dover creare il file?

GRAZIE MILLE
12 messaggi dal 01 luglio 2011
www.linkedin.com
Ciao a tutti,
vi riporto uno spunto per la prima domanda.
Anche a me è capitato di notare questa problematica del path del file troncato in IE.
Ma ho verificato questo problema solo lato server side.
Mi sembra di ricordare che a video, durante la selezione del file con il browsing, il path venga inserito completamente nella text box, ricordo male?
Se mi confermi questo comportamento, forse potresti, tramite uno script lato client tipo sull'onchange, catturare il valore completo, copiarlo in un campo hidden e poi leggere questo campo lato server e così inserlo nel db.
Credo che questo fosse il tuo scopo.
Spero di aver capito bene, altrimenti perdonami :-)

Ciao,
Simone

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.