open webfile error 404

sto usando questo tipo di codice per guardare un pdf in webhtmlview, gli scenari sono i medesimi

se apro la path con explore tutto ok
se apro con webhtmlview errore 404 pagina non trovata

vai a capire, dove sbaglio arci picchia

[code] dim f as new FolderItem
dim namefolder as string = “circ_” + Session.IOFullName.ReplaceAll(" “,”_")

f = GetFolderItem(namefolder)

if f.Exists = false then
  return
end if

f = f.Child("document")

if f.Exists = false then
  return
end if

f = f.Child(me.List(me.ListIndex))

if f <> Nil And f.Exists Then
  
  dim wfile As new WebFile
  
  wfile = WebFile.Open(f)
  
  wfile.MIMEType = "application/pdf"
  
  dim md as new Modal_view
  md.Show
  md.Link1.URL =  "http://" + session.header("host") + wfile.URL
  md.HTMLViewer1.URL = "http://" + session.header("host") + wfile.URL
  
end if[/code]

questo pa path che genero con folderitem

file:///C:/Users/ivanomonti/Desktop/Demo_Xojo/DebugDemo/circ_Human_Equality/document/Human_Equality_document_0.pdf

ma per motivi di sicurezza non viene aperto da javascript a quanto pare

Ovviamente non puoi pubblicare un url file:/// che rappresenterebbe un file sul disco del client!
Explorer te lo fa vedere perch ti fa vedere il contenuto del tuo disco.

L’url dell’HTMLViewer deve essere: http://+session.header(“host”)+"/"+namefolder+"/document/"+f.name

O se vuoi "nascondere il path interno quello che vuoi tanto dopo devi gestire la richiesta con app.handleUrl e servirlo da li
Ovvero vedere se trovi il file dal path richiesto, aprire il file binario e se tutto ok dare lo status a 200, il mimetype e scrivere l’intero contenuto del file

[quote=211537:@Antonio Rinaldi]Ovviamente non puoi pubblicare un url file:/// che rappresenterebbe un file sul disco del client!
Explorer te lo fa vedere perché ti fa vedere il contenuto del tuo disco.

L’url dell’HTMLViewer deve essere: http://+session.header(“host”)+"/"+namefolder+"/document/"+f.name

O se vuoi "nascondere il path interno quello che vuoi tanto dopo devi gestire la richiesta con app.handleUrl e servirlo da li
Ovvero vedere se trovi il file dal path richiesto, aprire il file binario e se tutto è ok dare lo status a 200, il mimetype e scrivere l’intero contenuto del file[/quote]

Ciao Antonio, i casi li ho provati tutti e come il tuo esempio mi ritorna sempre error 404, faccio presente che sono in fase di debug io passo la path ma se uso il tuo concetto cambia, esempio

  1. path reale nel disco C:\Users\ivanomonti\Desktop\Demo_Xojo\DebugDemo\circ_Human_Equality\document\Human_Equality_document_0.pdf
  2. path reale nel web http://127.0.0.1:8080/circ_Human_Equality/document/Human_Equality_document_0.pdf

    In entrambi casi ho sempre lo stesso errore, cosa che trovo strana in quanto se usassi imageweb la folderitem la prenderebbe senza problemi, come delete file.

Boh, non capisco, vi prego di aver venia, devo risolvere assolutamente

La path quella che ricevi nell’evento App.handleUrl?
Se si risolvi il path da quell’evento e restituisci il file, mettendo lo status a 200

Stai chiedendo alla tua app un file (parlo dell’ htmlviewer)

non ti capisco, scusami spiegami bene, altrimenti divento più scemo di quello che sono.

[quote=211568:@Antonio Rinaldi]La path è quella che ricevi nell’evento App.handleUrl?
Se si risolvi il path da quell’evento e restituisci il file, mettendo lo status a 200

Stai chiedendo alla tua app un file (parlo dell’ htmlviewer)[/quote]

Perdonate ma questo elemento non lo capisco proprio, non ho capito che cosa sia una webHtmlView, di sicuro un frame rompiscatole, a questo punto mi sono creato un file html che creo al volo e inserisco tutti i parametri, come vuole html, esegue a pennello il preview pdf con chiamata risorsa acrobat, ma dentro WebHtmlView nulla. con tutti gli altri software perfetto come il mio sorriso.

il messaggio dal modulo questo:

Couldn’t Open Pdf
Something’s keeping this pdf from opening.

impossibile aprire pdf, perch qualche cretino lo trattiene, hahahah help me, possibile creare un modulo senza usare quel cretino.

codice

    dim f as new FolderItem
    dim namefolder as string = "circ_" + Session.IOFullName.ReplaceAll(" ","_")
    
    f = GetFolderItem(namefolder)
    
    if f.Exists = false then
      return
    end if
    
    f = f.Child("document")
    
    if f.Exists = false then
      return
    end if
    
    f = f.Child(me.List(me.ListIndex))
    
    if f <> Nil And f.Exists Then
      
      dim md as new Modal_view
      
      dim s as String = "http://" + Session.header("host") + "/circ_" + Session.IOFullName.ReplaceAll(" ","_") + "/document/" + me.List(me.ListIndex)
      
      dim x as string = "<html xmlns='http://www.w3.org/1999/xhtml'>" + _
      "<head>" + _
      "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />" + _
      "<title>View</title>" + _
      "</head>" + _
      "<body>" + _
      "<embed src='" + f.URLPath + "' width='600' height='600' alt='pdf' pluginspage='http://www.adobe.com/products/acrobat/readstep2.html' />" + _
      "</body>" + _
      "</html>"
      
      md.Link1.URL =  s
      md.HTMLViewer1.LoadPage(x)
      
      md.Show
      
    end if

codice html generato

<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />
<title>View</title>
</head>
<body>
<embed src='file:///C:/Users/ivanomonti/Desktop/Demo_Xojo/DebugDemo/circ_Human_Equality/document/Human_Equality_document_0.pdf' width='600' height='600' alt='pdf' pluginspage='http://www.adobe.com/products/acrobat/readstep2.html' />
</body>
</html>

scusate ironia, ma dopo ore di tentativi e nulla, qualche cazzata la devo mettere.

Esempio semplice semplice:
Una pagina web con un pulsante e un htmlViewer e una propriet wf as webFile.
Il file da mostrare sul desktop: test.pdf
Nell’evento action del pulsante:

[code] dim f as FolderItem=SpecialFolder.Desktop.Child(“test.pdf”)
if f<>nil and f.Exists then
wf = WebFile.Open(f)

wf.MIMEType = "application/pdf"
System.DebugLog wf.URL
HTMLViewer1.URL=wf.URL

end if[/code]

Antonio non funziona, stato un codice che ho messo anche nei miei esempi, sar un baco della mia versione 2014 r3.2

risolto il mistero webfile lo dichiaravo da codice e xojo non lo prende inconsiderazione, quindi grazie a Michel (america) mi ha consigliato di farlo come propriet e non scriverlo a codice… risultato ottenuto.

Fanculo xojo e me che non ci ho pensato.

Non che non lo prende in considerazione.
che va fuori scopo: finita la funzione la variabile viene distrutta, come in tutti i linguaggi.

e nell’ultimo esempio ho detto propriet quindi rimane in scopo fintanto che la finestra esiste (nel caso tuo che la metti su una modal, deve essere una propriet della modal)

ma dal momento che passo il webfile dentro all’oggetto non dovrebbe morire, a meno che non sia un vettore

il web file un oggetto che viene preparato per essere “servito” al client. Se esce di scopo viene eliminato e nel momento in cui il viewer lo richiede (a cui passi l’url non l’oggetto)
Quello che facevi tu era:
if then

<dai l’url del web file al viewer>
end if
<fine scopo del web file, web file distrutto>

Il web file non altro che un oggetto in cui ci sono le informazioni per servirlo al momento in cui devi servirlo (ovvero viene richiesto al server)

grazie Antonio, non pensavo fosse vettore.

ora mi rimane il problema dei diversi tipi di file

md.wf.MIMEType = “application/pdf”

ma se fossero ad esempio txt o altro, dove trovo una tabella mimetype!!

ringrazio anticipatamente

potrebbe essere utile a tutti

link tabella MimeType text