Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655

    FileInputStream Impossibile trovare il percorso specificato su WIN7

    ciao a tutti,

    sto testando la mia servlet per caricare un file su una cartella di rete.

    Ora su Win XP funge, su Win 7 funziona solo se voglio caricare un file da una cartella di rete.

    Se provo a leggere dal desktop ho sempre l'errore:
    O java.io.FileNotFoundException: (Impossibile trovare il percorso specificato.)

    all'istruzione
    codice:
     
    FileInputStream in = 
     
    new FileInputStream( fi.getName() );
    da cosa può dipendere, permessi di sicurezza su Win 7?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    sto testando la mia servlet per caricare un file su una cartella di rete.

    Ora su Win XP funge, su Win 7 funziona solo se voglio caricare un file da una cartella di rete.
    Precisa un po' meglio il contesto. La Servlet esattamente cosa fa? Gestisce un "file upload" da un client e salva il file da qualche parte? O semplicemente è la servlet che scrive su un path noto, prefissato? O che altro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Fai attenzione: le servlet su win7 potrebbero girare con un utente diverso dal tuo, quindi potrebbe davvero non trovare il file perche' sono su un altro desktop.
    Fai attenzione quindi anche ai drive mappati dalla rete o mediante subst, perche' la tua servlet potrebbe benissimo non vederli

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sottovento Visualizza il messaggio
    le servlet su win7 potrebbero girare con un utente diverso dal tuo
    Dipende da come viene installato/gestito/avviato il Servlet container ... non dalle servlet in sé, ovviamente.
    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
    Jan 2007
    Messaggi
    655
    Dunque tramite un campo "INPUT TYPE=""FILE", recupero il nome del file che l'utente vuole caricare.
    Il tutto gira su WebSphere Application Server, IBM.

    Effettivamente secondo me è un problema di utente, come segnalava sottovento.
    Dico questo perché dal Desktop della macchina dove gira il Server non ho problemi a caricarlo, dal client invece ho il problema che vi indicavo. Questo anche se per accedere all'applicazione inserisco user e password uguali.

    Credo sia un problema di utente WIN, che non so come risolvere.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    Dunque tramite un campo "INPUT TYPE=""FILE", recupero il nome del file che l'utente vuole caricare.
    Sì ma attenzione, al server deve interessare innanzitutto lo stream del file in input nel body della request. Poi al server può essere utile sapere il nome "base" (senza path) del file per memorizzarlo da qualche parte o per dedurre il tipo di file dalla estensione o cose del genere.
    Ultima modifica di andbin; 07-12-2016 a 13:26
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Il fatto che tu stia parlando di FileInputStream e di INPUT TYPE="file" rende automatica una cosa: non hai chiara la differenza fra "risorsa locale al server" (che può essere letta tramite FileInputStream) e "risorsa locale al client".

    Un file presente all'interno del disco del server (o all'interno di una cartella di rete raggiungibile dal server) è una rosorsa "locale al server". Lui ci può accedere come fosse un qualsiasi altro file sul proprio file system.

    Ciò che risiede sul client (ovvero chi usa il browser per usare la tua webapp) non è raggiungibile in alcun modo dal server. E questo è un punto fondamentale.

    Ora, perchè a te funziona da dentro al server? Facile... perchè ti trovi in una posizione decisamente anomala e favorevole: ovvero il client ed il server sono la stessa macchina, quindi un percorso "locale al client" è automaticamente anche un validissimo percorso "locale al server". E questa cosa funziona solo in questa particolare condizione.

    Ciò che viene fatto quando c'è un controllo INPUT di tipo File è, grosso modo, questo:

    Il browser legge il file dal file system dell'utente
    Il browser contatta il server
    Il browser spedisce al server lo stream di byte letto precedentemente

    Al server, quindi, arriva una richiesta (HttpRequest) di un particolare tipo (non una normale request, ma di tipo multipart/form-data), che va gestita lato server in modo particolare (e, per questo tipo di cose, esistono librerie preconfigurate perchè farlo manualmente su una HttpServletRequest non è così banale). Quindi il server deve leggere il file dalla HttpServletRequest non dal file system (quindi niente FileInputStream, almeno non inizialmente).

    Esistono librerie apposite (come la O'Reilly Servlets) che permettono di trattare in modo piuttosto semplice queste cose: si occupano loro di leggere lo stream di byte e di andarlo a scrivere in un file all'interno di una locazione da te prescelta. Così facendo, quello che ottieni dalla lettura del parametro è un oggetto File che effettivamente punta ad un file fisico sul disco del server (che è stato scritto sotto banco per te dalla libreria). A quel punto puoi usare le normali classi per l'InputStream.


    Ciao.
    Ultima modifica di LeleFT; 07-12-2016 a 14:07
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655
    OK. Mi sorge una domanda però, la mia esigenza è quella di caricare il file su una cartella di rete e non su Server.

    Per farlo sto utilizzando SmbFile che sfrutta InputStream , come potrei utilizzare le funzionalità dell'upload per caricare su cartella di rete

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    la mia esigenza è quella di caricare il file su una cartella di rete e non su Server.
    Se hai il classico form di submit per inviare un file (<input type="file" ...ecc...), questo è un "upload" verso il SERVER. La applicazione server-side riceve lo stream del file (NON "sa" da dove il client ha preso il file, se da disco, penna usb, disco di rete o che altro) e lo può depositare dove vuole: file su file-system locale del server, file su una cartella remota che il server vede, campo BLOB su un DB ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.