Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48

    scrivere un documento su File all'interno dell'application server

    Salve a tutti, ho bisogno di scrivere un documento su file e poi lanciarlo al click su un tasto (facendo un window.open(path) da javascript). Il mio problema è definire il path del file, perchè se uso il path assoluto (C:\\..) poi quando dalla mia pagina web (localhost) clicco sul tasto e lancio window.open(path) mi fornisce 'Accesso Negato' in quanto i domini non sono gli stessi (pagina su localhost e file su C, o almeno penso sia così). Mi servirebbe usare il path relativo a localhost e quindi garantire anche la portabilità su altri ambienti. Per cui andare a scrivere il file su qualcosa del tipo web-app/MyApp (insomma la struttura classica di una web application). Sto provando ad inserire un path simile ma mi dà l'eccezione java FileNotFoundException . Please, help me

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    perchè se uso il path assoluto (C:\\..) poi quando dalla mia pagina web (localhost) clicco sul tasto e lancio window.open(path) mi fornisce 'Accesso Negato' in quanto i domini non sono gli stessi (pagina su localhost e file su C, o almeno penso sia così). Mi servirebbe usare il path relativo a localhost e quindi garantire anche la portabilità su altri ambienti
    Innanzitutto, ovviamente, il client non "vede" il file-system del server (se sviluppi e testi sulla tua macchina, allora la macchina è sia client che server e il file-system è comune ... ma devi ignorare questo caso particolare in questo scenario).
    Il client fa solo richieste a dei URL sul server tramite HTTP e cosa sia mappato a tali URL ... dipende appunto dal server.

    Hai almeno 3 possibilità:
    - Se il documento lo puoi generare "al volo" a fronte di una request, non c'è nemmeno bisogno di scrivere un file su file-system. Potresti inviarlo direttamente sulla response. Se puoi usare questo approccio o no, dipende da svariati fattori.

    - Scrivi il file sul file-system del server in una qualunque directory, anche temporanea. Poi realizzi una Servlet o qualunque altra cosa che puoi eseguire lato server (a seconda della tecnologia/framework usato) per leggere il file e inviarlo sulla response.

    - Scrivi il file in una directory che sia direttamente accessibile tramite HTTP sul server e che quindi possa essere servita direttamente dal server HTTP senza eseguire Servlet o quant'altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Innanzitutto, ovviamente, il client non "vede" il file-system del server (se sviluppi e testi sulla tua macchina, allora la macchina è sia client che server e il file-system è comune ... ma devi ignorare questo caso particolare in questo scenario).
    Il client fa solo richieste a dei URL sul server tramite HTTP e cosa sia mappato a tali URL ... dipende appunto dal server.

    Hai almeno 3 possibilità:
    - Se il documento lo puoi generare "al volo" a fronte di una request, non c'è nemmeno bisogno di scrivere un file su file-system. Potresti inviarlo direttamente sulla response. Se puoi usare questo approccio o no, dipende da svariati fattori.

    - Scrivi il file sul file-system del server in una qualunque directory, anche temporanea. Poi realizzi una Servlet o qualunque altra cosa che puoi eseguire lato server (a seconda della tecnologia/framework usato) per leggere il file e inviarlo sulla response.

    - Scrivi il file in una directory che sia direttamente accessibile tramite HTTP sul server e che quindi possa essere servita direttamente dal server HTTP senza eseguire Servlet o quant'altro.

    Ciao andbin, grazie per le tue gentili risposte. Ti spiego meglio in dettaglio :
    lato server vado a recuperare un oggetto (un pdf) e lo scrivo su un file all'interno del file system del server, ritorno al client il path di tale oggetto e lo apreo nel browser tramite un window.open(path).
    Lato server eseguo operazioni tipiche di scrittura su file, tra cui File file = new File(path) : il mio problema è proprio come settare questo path, io ho fatto path = ./nomefile.pdf ! Ora essendo in locale, il file system del mio server sarà sotto C (infatti l'URL del pdf sarà del tipo C:\....\nomefile.pdf); considera che in futuro il server sarà su una macchina diversa da quella del client. Quando vado a richiamare window.open(path) lato client, mi dà "Accesso Negato". Come posso risolvere ?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    lato server vado a recuperare un oggetto (un pdf)
    Io ho indicato 3 possibilità ben diverse, le hai comprese?
    Quando dici "vado a recuperare un oggetto (un pdf)" cosa intendi? da un BLOB su un DB? Se è così, questo recupero del PDF lo fai quando? O per meglio dire: a seguito di quale request da parte del client? Per essere più precisi: a seguito di un click su un link es. "Scarica PDF"?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Io ho indicato 3 possibilità ben diverse, le hai comprese?
    Quando dici "vado a recuperare un oggetto (un pdf)" cosa intendi? da un BLOB su un DB? Se è così, questo recupero del PDF lo fai quando? O per meglio dire: a seguito di quale request da parte del client? Per essere più precisi: a seguito di un click su un link es. "Scarica PDF"?
    Certo le ho comprese, il processo di recupero del pdf è questo : l'utente clicca un tasto (che è il download del pdf), da qui parte una servlet che a sua volta interroga un web service che ritorna il pdf. Ora l'obiettivo è FAR APRIRE una finestra del browser con il pdf all'interno. Quindi ritornare al client il path del pdf scritto su file e far window.open(path), oppure raggiungo lo stesso obiettivo se scrivo lo stream nella response?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    Ora l'obiettivo è FAR APRIRE una finestra del browser con il pdf all'interno.
    Faccio solo una premessa più in generale: quando si tratta di gestire lato client da browser dei tipi di documenti "particolari", es. pdf, xls, doc, ecc.... come essi saranno "aperti" dipende principalmente dalle impostazioni del browser e in parte anche da cosa eventualmente sceglie l'utente.
    Mi spiego meglio: nel browser potrebbe essere attivo il plugin di Adobe Reader, nel qual caso un link ad un PDF potrebbe aprirsi con Adobe Reader incorporato nella pagina. Ma potrebbe essere disabilitato o potrebbe esserci un altro plugin che gestisce i PDF (es. io uso principalmente Firefox e nelle versioni più recenti ha un suo plugin per i PDF che non è comunque al livello di Adobe Reader ma è sufficiente in molti casi). L'utente potrebbe voler aprire il PDF esternamente al browser con la applicazione "predefinita" (quindi non incorporata nella pagina) oppure semplicemente scaricare e salvare il file su file-system.

    Visto che le possibilità sono molteplici e il server generalmente ha ben poco controllo (limitato solo alla impostazione del content-type nella response) su come verrà aperto dal client, la soluzione più semplice e lineare è solo una: a seguito di una request al server, inviare al client lo stream binario pari pari del contenuto del PDF, specificando un content-type appropriato, es. "application/pdf". Se si vuole si può specificare es. "application/octet-stream" che il browser spesso (tipicamente) gestisce mostrando la classica dialog "apri con... o salva come..." (ma l'ultima parola spetta comunque al browser e a come è configurato!).

    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    Quindi ritornare al client il path del pdf scritto su file e far window.open(path), oppure raggiungo lo stesso obiettivo se scrivo lo stream nella response?
    Potresti anche inviare direttamente lo stream del PDF nella response. Senza sapere altro comunque non posso sospettare problemi che ci potrebbero essere a riguardo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Faccio solo una premessa più in generale: quando si tratta di gestire lato client da browser dei tipi di documenti "particolari", es. pdf, xls, doc, ecc.... come essi saranno "aperti" dipende principalmente dalle impostazioni del browser e in parte anche da cosa eventualmente sceglie l'utente.
    Mi spiego meglio: nel browser potrebbe essere attivo il plugin di Adobe Reader, nel qual caso un link ad un PDF potrebbe aprirsi con Adobe Reader incorporato nella pagina. Ma potrebbe essere disabilitato o potrebbe esserci un altro plugin che gestisce i PDF (es. io uso principalmente Firefox e nelle versioni più recenti ha un suo plugin per i PDF che non è comunque al livello di Adobe Reader ma è sufficiente in molti casi). L'utente potrebbe voler aprire il PDF esternamente al browser con la applicazione "predefinita" (quindi non incorporata nella pagina) oppure semplicemente scaricare e salvare il file su file-system.

    Visto che le possibilità sono molteplici e il server generalmente ha ben poco controllo (limitato solo alla impostazione del content-type nella response) su come verrà aperto dal client, la soluzione più semplice e lineare è solo una: a seguito di una request al server, inviare al client lo stream binario pari pari del contenuto del PDF, specificando un content-type appropriato, es. "application/pdf". Se si vuole si può specificare es. "application/octet-stream" che il browser spesso (tipicamente) gestisce mostrando la classica dialog "apri con... o salva come..." (ma l'ultima parola spetta comunque al browser e a come è configurato!).


    Potresti anche inviare direttamente lo stream del PDF nella response. Senza sapere altro comunque non posso sospettare problemi che ci potrebbero essere a riguardo.
    Ciao andbin, alla fine ho risolto integrando il flusso direttamente all'interno della response. Grazie tanto per il supporto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.