17 messaggi dal 16 febbraio 2001
Salve a tutti. Ho necessità di codificare un file pdf per poterlo poi memorizzare in un archivio e successivamente decodificarlo per visualizzarlo in una pagina web. Sto usando in vb convert.toBase64 per l'encode e convert.fromBase64 per il decode ma quando vado a visualizzare il risultato il sistema mi risponde con un messaggio di errore 'il file è corrotto'. Come posso risolvere? Grazie
Puoi postare un po' di codice?

Ormai programmano tutti... ma la professionalità appartiene a pochi
17 messaggi dal 16 febbraio 2001
Encode:
Dim dfile As String = Path.GetFullPath(fuDaCaricare.PostedFile.FileName)
Dim filename As String = nProt & "-" & myfunc.ApcStr(fuDaCaricare.FileName)
Dim sr As New IO.FileStream(dfile, IO.FileMode.Open)
ReDim scrBT(sr.Length)
sr.Read(scrBT, 0, sr.Length)
sr.Close()
Dim strJason As String = ""
strJason = "{""sigla_documento"": ""CRSKYC"", "
strJason += """nome_documento"": """ & filename & """, "
strJason += """tipo_documento"": ""pdf"", "
strJason += """intestazione"": ""test intestazione"", "
strJason += """metadati_archiviazione"": ""metadati"", "
strJason += """dati_documento"": """ & Convert.ToBase64String(scrBT) & """, "
strJason += """sezioni_documento"": [{""sigla_sezione"": ""string"", "
strJason += """intestazione"": ""string"", "
strJason += """note_documento"": [{""intestazione"": ""string"", "
strJason += """testo"": ""string""}], "
strJason += """paragrafi_documento"": [{""intestazione"": ""string"", "
strJason += """testo"": ""string""}]}]}"

Decode:
Dim message As HttpResponseMessage = confClient.GetAsync(ChiamaServ).Result 'chiamata a WS
If message.IsSuccessStatusCode Then
Dim inter = message.Content.ReadAsStringAsync()

Dim result = JsonConvert.DeserializeObject(Of GetDoc)(inter.Result)
IDDocumento = result.pdf 'carica da un json con chiave pdf il valore Base64

Response.AddHeader("Content-Type", "application/pdf")
Response.AddHeader("Content-Length", IDDocumento.Length.ToString())
Response.AddHeader("Content-Disposition", "inline;")
Response.AddHeader("Cache-Control", "private, max-age=0, must-revalidate")
Response.AddHeader("Pragma", "public")
Response.BinaryWrite(Convert.FromBase64String(IDDocumento))
Response.[End]()
End If


Quest'ultima parte dovrebbe far vedere il file pdf nel browser ma me lo fa aprire con Adobe Reader (probabilmente manca il plugin in IE11 abilitato ma sono in ambiente protetto e impossibilitato a vedere i settaggi di IE) e quando lo apre mi manda il messaggio.
Grazie
Modificato da g.giliberti il 12 giugno 2017 09.19 -
Modificato da g.giliberti il 12 giugno 2017 09.20 -
Modificato da g.giliberti il 12 giugno 2017 09.22 -
Modificato da g.giliberti il 12 giugno 2017 09.27 -
3.706 messaggi dal 28 gennaio 2003
secondo me conviene memorizzare il file binario in un campo blob del database e in un campo testo il suo nome.

Pietro
17 messaggi dal 16 febbraio 2001
Il file viene convertito in Base64 e memorizzato in un db con tutte le informazioni per rintracciarlo, e questo viene fatto perfettamente.
Quello che non mi funziona è l'inverso ovvero riprendere il file, decodificarlo in pdf e visualizzarlo nel browser (ie11).
Ora ho provato a salvarlo temporaneamente nella cartella App_Data e forse sono riuscito a risolvere anche se ho ancora un errore ma di diverso tipo. Il file decodificato riesco ad aprirlo con AR.
3.706 messaggi dal 28 gennaio 2003
non credo che sia necessario salvarlo temporaneamente nella cartella App_Data.
Basta leggere il dato dal database in una stringa, decodificarlo trasformandolo in un vettore di byte e restituirlo "inline" nello stream di uscita.

Pietro

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.