Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Recuprare valore da upload

    Ciao ragazzi,
    ho trovato questo codice per l'upload di un file.
    codice:
    Dim file_sent As HttpPostedFile = filMyFile.PostedFile
            Dim file_size As Integer = file_sent.ContentLength
            If Not (file_sent Is Nothing) Then
                If file_size > 0 Then
                    Dim dati(file_size) As Byte
                    file_sent.InputStream.Read(dati, 0, file_size)
                    Dim filename As String = file_sent.FileName
                    Dim fs As FileStream = New FileStream(Server.MapPath("public/" + Path.GetFileName(filename)), FileMode.Create)
                    fs.Write(dati, 0, file_size)
                    fs.Close()
                    Response.Write("<script language='javascript'> { window.opener.document.form1.TxtAllegato.value = '" + filename + "';self.close(); }</script>")
                End If
    
            End If
    Funziona tutto bene, l'unico problema riguarda il recupero del percorso del file.
    La parte che vedete in grassetto l'ho aggiunta io, mi serve perchè l'upload lo faccio su di una popup. Alla chiusura della quale mi si deve popolare la textbox della pagina chiamante con il valore del percorso del file, altrimenti l'invio della email mi genera errore.
    Come vedete ho messo come valore "filename", ma nella textbox mi mette il percorso privo degli "/", quindi è praticamente inutile.
    Ho provato a mettere
    Path.GetFileName(filename)
    ma anche in questo caso non va bene, perchè inserisce soltanto iol nome del file, e quindi m icontinua a generare errore nell'invio dell'email.
    Sapete dirmi come posso risolvere?
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non sono certo che usare la proprietà FileName dell'oggetto HttpPostedFile sia il metodo giusto, in quanto lato server vi sono delle informazioni che vanno irrimediabilmente perse (se non altro, perché non avrebbe senso mantenere lato server il percorso relativo al client, dato che è inaccessibile).

    Tuttavia, puoi accedere al percorso completo del file dal lato client, tramite JavaScript, leggendo la proprietà value del controllo che riceve in input il percorso stesso.

    Ad esempio, ti riporto uno stralcio di codice che consente di visualizzare all'interno di un popup il percorso del file inviato quando si fa clic sul pulsante di conferma dell'operazione:

    codice:
        protected void Page_Load(object sender, EventArgs e)
        {
            AcceptButton.OnClientClick = System.String.Format(
                @"alert('Il percorso del file è:\n' + {0}.value);",
                FileUploadControl.ClientID);
        }
    Il codice presentato fa visualizzare un messaggio, ma potresti modificare il codice affinché svolga un'operazione differente, ad esempio valorizzando lato client una variabile da leggere successivamente dalla pagina chiamante, oppure valorizzando un campo nascosto che venga inoltrato alla pagina lato server affinché l'informazione permanga e sia disponibile per fare ciò che ti è stato richiesto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    grazie per la risposta Alka, ma purtroppo non funziona.
    Dunque, come prima cosa ho convertito il codice scritto da te in VB.NET

    codice:
    Dim file_sent As HttpPostedFile = filMyFile.PostedFile
            Dim file_size As Integer = file_sent.ContentLength
            If Not (file_sent Is Nothing) Then
                If file_size > 0 Then
                    Dim dati(file_size) As Byte
                    file_sent.InputStream.Read(dati, 0, file_size)
                    Dim filename As String = file_sent.FileName
                    Dim fs As FileStream = New FileStream(Server.MapPath("public/" + Path.GetFileName(filename)), FileMode.Create)
                    fs.Write(dati, 0, file_size)
                    fs.Close()
                    Button1.OnClientClick = System.String.Format("alert('Il percorso del file è:\n' + {0}.value);", filMyFile.ClientID)
                    'Response.Write("<script language='javascript'> { window.opener.document.form1.TxtAllegato.value = '" + filename + "';self.close(); }</script>")
                End If
    
            End If
    ma già facendo così non mi esce nessuna finestra di alert.
    Per quanto riguarda il discorso tramite javascript, era la soluzione iniziale da me adottata. Al posto di mettere il valore filename, inzialmente avevo messo
    nome_form.nome_inputfyle.value
    ma continuavo a non avere nessun risultato...

    Puoi dirmi comeposso fare per risolvere?
    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da zetaweb
    Dunque, come prima cosa ho convertito il codice scritto da te in VB.NET
    ma già facendo così non mi esce nessuna finestra di alert.
    Occorre vedere come hai convertito il codice e dove hai inserito lo script.
    In quel caso, lo script viene introdotto nella pagina solo dopo che hai premuto il pulsante, mentre io l'avevo inserito nell'evento OnLoad della pagina stessa.

    Originariamente inviato da zetaweb
    Per quanto riguarda il discorso tramite javascript, era la soluzione iniziale da me adottata.
    Con JavaScript si possono fare molte cose, quindi il fatto di adottarlo non garantisce il risultato, poiché va usato correttamente.

    Per non complicare le cose, potresti tentare questo approccio: all'interno dell'evento OnLoad della pagina definire il codice JavaScript simile a quello presentato ma che provveda a copiare, all'interno di un campo nascosto (HtmlHiddenField), con attributo runat="server", il valore specificato nel controllo di selezione del file (invece di visualizzarlo in una finestra di alert, che era solamente un esempio).

    Ispezionando quel controllo nascosto, se l'operazione di upload va a buon fine, puoi recuperare il percorso completo del file memorizzato precedentemente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Occorre vedere come hai convertito il codice e dove hai inserito lo script.
    In quel caso, lo script viene introdotto nella pagina solo dopo che hai premuto il pulsante, mentre io l'avevo inserito nell'evento OnLoad della pagina stessa.
    beh te l'ho riscritto il codice... è la parte in neretto
    codice:
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim file_sent As HttpPostedFile = filMyFile.PostedFile
            Dim file_size As Integer = file_sent.ContentLength
            If Not (file_sent Is Nothing) Then
                If file_size > 0 Then
                    Dim dati(file_size) As Byte
                    file_sent.InputStream.Read(dati, 0, file_size)
                    Dim filename As String = file_sent.FileName
                    Dim fs As FileStream = New FileStream(Server.MapPath("public/" + Path.GetFileName(filename)), FileMode.Create)
                    fs.Write(dati, 0, file_size)
                    fs.Close()
                    Button1.OnClientClick = System.String.Format("alert('Il percorso del file è:\n' + {0}.value);", filMyFile.ClientID) 
                    'Response.Write("<script language='javascript'> { window.opener.document.form1.TxtAllegato.value = '" + filename + "';self.close(); }</script>")
                End If
    
            End If
    end sub
    Per non complicare le cose, potresti tentare questo approccio: all'interno dell'evento OnLoad della pagina definire il codice JavaScript simile a quello presentato ma che provveda a copiare, all'interno di un campo nascosto (HtmlHiddenField), con attributo runat="server", il valore specificato nel controllo di selezione del file (invece di visualizzarlo in una finestra di alert, che era solamente un esempio).
    beh lo so che l'alert era solo un esempio, a me nonserve, ma se non lo recupero nell'alert significa che non lo vedo questo valore, quindi credo che con qualsiasi altro metodo avrei l'errore...

    Potresti essere un pochino piu preciso per piacere?
    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Inserisci un controllo asp:HiddenField all'interno della tua pagina; nell'evento OnLoad, scrivi una porzione di codice simile alla seguente (eventualmente tradotta in VB.NET):

    codice:
        protected void Page_Load(object sender, EventArgs e)
        {
            btAccept.OnClientClick = System.String.Format(
                "{0}.value = {1}.value", hfPath.ClientID, fuFile.ClientID);
        }
    Nell'esempio, hfPath è un campo nascosto in cui verrà copiato, lato client, il percorso del file specificato in fuFile che invece corrisponde al controllo asp:FileUpload.

    Questo avverrà lato client quando si preme il pulsante btAccept per accettare il file selezionato ed eseguire l'upload.

    Da codice, sia lato client che lato server, sarà possibile accedere quindi alla proprietà del controllo hfPath per ottenere il percorso completo del file memorizzato precedentemente e mantenuto tra i vari PostBack della pagina.

    Se hai già codice JavaScript che restituisce il percorso alla pagina chiamante, ti basterà restituire tale valore al posto di quello utilizzato precedentemente, che era parziale, per ottenere il percorso completo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.