Visualizzazione dei risultati da 1 a 10 su 10

Discussione: problema con upload

  1. #1

    problema con upload

    salve a tutti


    sto usando uno script preso da freeasp.html.it per fare l'upload di uno o più file alla volta, e l'ho unito a uno script per aggiungere record a un db.

    Il problema che ho è che:
    - dei 2 file che invio via form solo uno viene salvato sul server (il primo in ordine)
    - gli altri campi che invio via form non vengono salvati su DB: non viene creato nessun nuovo record e la pagina asp che mi dà problemi, invece di chiudersi con un redirect, mi dà l'errore "impossibile visualizzare la pagina" (ma nessun errore ASP preciso...).
    - la cartella dove viene fatto l'upload ha i permessi di scrittura.

    Qualcuno sa dirmi cosa può essere? posto il codice della pagina che riceve i dati dal form...

    ***************


    <%
    'Questa variabile setta il percorso di dove effettuare l'upolad
    'la cartella non puo non esistere lo script non la crea ! ! !

    'percorso = Server.MapPath("/")
    percorso = "../upload/"

    ByteRicevuti = Request.TotalBytes

    if ByteRicevuti > 0 then
    DatiRicevuti = Request.BinaryRead(ByteRicevuti)
    For i = 1 To lenB(DatiRicevuti)
    FileBinario = FileBinario & chr(ascB(midB(DatiRicevuti,i,1)))
    Next
    FirmaFile = left(FileBinario,instr(FileBinario,"" & vbCrLf)-1)
    ArrPezzi = split(FileBinario,FirmaFile)

    for item = 1 to ubound(ArrPezzi)-1
    Inizio = instr(ArrPezzi(item),"" & vbCrLf & "" & vbCrLf)
    Intestazione = left(ArrPezzi(item),Inizio-1)
    Inizio = Inizio + len("" & vbCrLf) + len("" & vbCrLf)
    ContenutoFile = mid(ArrPezzi(item),Inizio,len(ArrPezzi(item))-Inizio-1)



    ' Qui recupero il file ALLEGATO da uploadare (se presente) e lo scrivo sul server
    if instr(Intestazione,"file1") > 0 then
    i = instr(Intestazione,"filename=")
    j = instr(i + 10,Intestazione,chr(34))
    NomeUpload = mid(Intestazione,i + 10,j-i-10)
    i = instrRev(NomeUpload,"\")
    if i<>0 then
    NomeFile = mid(NomeUpload,i + 1)
    else
    NomeFile = NomeUpload
    end if
    if i<>0 then
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Upload1 = True
    DimensioneFile1 = len(ContenutoFile)
    EstensioneFile1 = right(ContenutoFile,3)
    NomeFile1 = NomeFile
    Set textStream = FSO.CreateTextFile(server.mappath(percorso & NomeFile1), True, False)
    Set textStream = FSO.CreateTextFile(server.mappath(NomeFile1), True, False)
    textStream.Write ContenutoFile
    textStream.Close
    Set textStream = Nothing
    Set FSO = Nothing
    end if
    end if


    ' Qui recupero il file IMMAGINE da uplodare (se presente) e lo scrivo sul server
    if instr(Intestazione,"file2") > 0 then
    i = instr(Intestazione,"filename = ")
    j = instr(i + 10,Intestazione,chr(34))
    NomeUpload = mid(Intestazione,i + 10,j-i-10)
    i = instrRev(NomeUpload,"\")
    if i<>0 then
    NomeFile = mid(NomeUpload,i + 1)
    else
    NomeFile = NomeUpload
    end if
    if i<>0 then
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Upload2 = True
    DimensioneFile2 = len(ContenutoFile)
    EstensioneFile2 = right(ContenutoFile,3)
    NomeFile2 = NomeFile
    Set textStream = FSO.CreateTextFile(server.mappath(percorso & NomeFile2), True, False)
    textStream.Write ContenutoFile
    textStream.Close
    Set textStream = Nothing
    Set FSO = Nothing
    end if
    end if
    next

    ' Da qui in poi recupero gli altri dati e li scrivo




    Dim Rs
    Dim Conn


    Set Conn=Server.createobject("ADODB.connection")
    Set Rs=Server.createobject("ADODB.Recordset")
    Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.mappath("../filcea.mdb")



    rs.open "filcea", Conn,3,3
    rs.AddNew

    rs("titolo") = request.form("titolo")
    rs("txt") = request.form("txt")
    rs("formato") = request.form("formato")
    rs("attach") = NomeFile1
    rs("img") = NomeFile2
    rs("imgv") = request.form("imgv")
    rs("novita") = request.form("novita")
    rs("stato") = request.form("stato")

    rs.update
    rs.close
    Set rs = nothing


    Conn.close
    Set Conn = nothing
    response.redirect("add_form.asp")

    End if
    %>

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Dal secondo file in poi che recuperi c'è un errore di stampa e quindi questo

    codice:
    i = instr(Intestazione,"filename = ")
    deve diventare questo

    codice:
    i = instr(Intestazione,"filename=")
    Gli altri campi devi recuperarli come indicato nello script e non tramite request.form
    Leggi con attenzione l'articolo perché te lo dice il motivo.

    Roby

  3. #3
    grazie mille...domani ci riprovo

  4. #4
    ho seguito i tuoi consigli e funziona tutto, solo, aggiungendo a fine script una parte con connessione a db e modifica del record mi dà errore (senza specificare che riga e che codice di errore)...

    io ho modificato lo script così: mettendo prima la connessione a Db e partura recordset, poi la parte di recupero dei dati passati dal form e la scrittura di file su cartella e alla fine l'struzione SQL di modifica.

    In realtà se dal form carica tutti i campi file non mi dà errore, ma se ne lascio uno vuoto si

    penso sia perchè se un campo file è vuoto l'istruzione SQL si trova dentro una variabile non definita, almeno credo guardando sta parte di codice:

    if instr(Intestazione,"file1") > 0 then
    i = instr(Intestazione,"filename=")
    j = instr(i + 10,Intestazione,chr(34))
    NomeUpload = mid(Intestazione,i + 10,j-i-10)
    i = instrRev(NomeUpload,"\")
    if i<>0 then
    NomeFile = mid(NomeUpload,i + 1)
    else
    NomeFile = NomeUpload
    end if
    if i<>0 then
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Upload1 = True
    DimensioneFile1 = len(ContenutoFile)
    EstensioneFile1 = right(ContenutoFile,3)
    NomeFile1 = NomeFile
    Set textStream = FSO.CreateTextFile(server.mappath(percorso & NomeFile1), True, False)
    textStream.Write ContenutoFile
    textStream.Close
    Set textStream = Nothing
    Set FSO = Nothing
    end if
    end if

    e la successiva istruzione sql che uso:
    ... img = '"&NomeFile2&"', ...
    va da sé che se il campo del form non è stato valorizzato la var NomeFile2 non esiste...

    è per questo che mi dà errore? c'è un modo per agiungere un if alla prima parte dello script per creare la variabile che usero nella stringa sql?

    se qualcuno può aiutarmi...

  5. #5
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    In cima allo script metti:

    codice:
    NomeFile1 = ""
    e poi

    codice:
    ... img = '"&NomeFile1&"', ...
    Ricorda è NomeFile1!
    Il campo del db deve accettare stringhe di lunghezza 0, controllalo.

    Roby

  6. #6
    abbi pazienza ma non riesco a capire dove mettere il codice che mi dici...
    ho provato a metterlo prima della connessione al db ma nisba...dà errore

    se non ti spiace puoi indicarmelo? ti posto la pagina in versione semplificata...
    un'altra cosa: anche risolvendo questo problema mi dà lo stesso dei casini, questo script, se carico
    anche un solo file sui 200k: lo script va in timeout: secondo te se trovo uno sript che
    allunga il time out dell'upload risolvo il problema o è un difetto "intrinseco" dello script che sto usando?

    grazie ancora...



    <%
    'DB CONN

    Dim Rs
    Dim Conn
    Set Conn=Server.createobject("ADODB.connection")
    Set Rs=Server.createobject("ADODB.Recordset")
    Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.mappath("../db.mdb")


    'Questa variabile setta il percorso di dove effettuare l'upolad

    percorso = "../upload/"
    ByteRicevuti = Request.TotalBytes
    if ByteRicevuti > 0 then
    DatiRicevuti = Request.BinaryRead(ByteRicevuti)
    For i = 1 To lenB(DatiRicevuti)
    FileBinario = FileBinario & chr(ascB(midB(DatiRicevuti,i,1)))
    Next
    FirmaFile = left(FileBinario,instr(FileBinario,"" & vbCrLf)-1)
    ArrPezzi = split(FileBinario,FirmaFile)
    for item = 1 to ubound(ArrPezzi)-1
    Inizio = instr(ArrPezzi(item),"" & vbCrLf & "" & vbCrLf)
    Intestazione = left(ArrPezzi(item),Inizio-1)
    Inizio = Inizio + len("" & vbCrLf) + len("" & vbCrLf)
    ContenutoFile = mid(ArrPezzi(item),Inizio,len(ArrPezzi(item))-Inizio-1)


    ' Recupero i campi se sono compilati

    if instr(Intestazione,"titolo") > 0 then
    titolo = ContenutoFile
    end if
    if instr(Intestazione,"txt") > 0 then
    txt = ContenutoFile
    end if
    if instr(Intestazione,"id") > 0 then
    id = ContenutoFile
    end if


    ' Qui recupero il file da uploadare (se presente) e lo scrivo sul server
    if instr(Intestazione,"file1") > 0 then
    i = instr(Intestazione,"filename=")
    j = instr(i + 10,Intestazione,chr(34))
    NomeUpload = mid(Intestazione,i + 10,j-i-10)
    i = instrRev(NomeUpload,"\")
    if i<>0 then
    NomeFile = mid(NomeUpload,i + 1)
    else
    NomeFile = NomeUpload
    end if
    if i<>0 then
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Upload1 = True
    DimensioneFile1 = len(ContenutoFile)
    EstensioneFile1 = right(ContenutoFile,3)
    NomeFile1 = NomeFile
    Set textStream = FSO.CreateTextFile(server.mappath(percorso & NomeFile1), True, False)
    textStream.Write ContenutoFile
    textStream.Close
    Set textStream = Nothing
    Set FSO = Nothing
    end if
    end if
    next

    ' Da qui in poi è possibile fare esegiure allo script altre operazioni
    set rs = conn.execute("UPDATE tab SET titolo = '"&titolo&"', txt = '"&txt&"', attach = '"&NomeFile1&"' WHERE id = "& id &"")
    End if
    %>

  7. #7
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Lo script sembra corretto.
    All'inizio dello script puoi provare a mettere:

    codice:
    server.scripttimeout = 300 'secondi
    Lo script ha limiti intrinseci ma fino a 1 Mb a me non da problemi.

    Roby

  8. #8
    per la questione del time out ho già trovato dei post anche tuoi utili...

  9. #9
    scusa, sempre riguardo al limite di peso dei file, dato che il sito per cui sto facendo ste pagine sarà su un server di proprietà del cliente, non è possibile settare IIS o agiungere componenti che non diano problemi anche con grossi file (e usando sempre lo script di freeasp.html.it)?

  10. #10

    inizio a non poterne più...
    sto maledetto script non mi funziona, ho fatto delle prove con file semplificati e continua a darmi problemi...o meglio: MI CANCELLA IL FILE MA MI DA' ERRORE (codice errore 800a0035)...

    in sintesi ho fatto 2 file: uno solo con la procedura di deletefile, uno con quella di caricamento o eliminazione.

    il primo file non mi dà problemi, cancella e ninete 800a0035

    IL secondo si, sia che cancello usando il percorso fisico (col valore / nome del file già inserito nella stringa senza usare quello passato da form), sia che uso servermappath con il nome del file passato da variabile:
    nello specifico gli errori sono rispettivamente

    con del con VAR e servermappath:
    ***************
    t.txt
    --------------------------------------------------------------------------------
    C:\Inetpub\wwwroot\filcea\upload\t.txt
    Errore di run-time di Microsoft VBScript errore "800a0035'

    Impossibile trovare il file

    /FILCEA/admin/upload.asp, riga 75
    *********************************
    senza VAR e senza servermappath:
    ***************
    Oggetto Server errore "ASP 0177 : 800a0035'

    Impossibile eseguire il metodo Server.CreateObject

    /FILCEA/admin/upload.asp, riga 76

    00000000


    ----il file "incriminato":
    <%
    'VARIABILE CHE SETTA DOVE FARE UPLOAD: LA CARTELLA DEVE ESSER ESISTENTE
    percorso = "../upload/"

    ByteRicevuti = Request.TotalBytes

    if ByteRicevuti > 0 then
    DatiRicevuti = Request.BinaryRead(ByteRicevuti)
    For i = 1 To lenB(DatiRicevuti)
    FileBinario = FileBinario & chr(ascB(midB(DatiRicevuti,i,1)))
    Next
    FirmaFile = left(FileBinario,instr(FileBinario,"" & vbCrLf)-1)
    ArrPezzi = split(FileBinario,FirmaFile)

    for item = 1 to ubound(ArrPezzi)-1
    Inizio = instr(ArrPezzi(item),"" & vbCrLf & "" & vbCrLf)
    Intestazione = left(ArrPezzi(item),Inizio-1)
    Inizio = Inizio + len("" & vbCrLf) + len("" & vbCrLf)
    ContenutoFile = mid(ArrPezzi(item),Inizio,len(ArrPezzi(item))-Inizio-1)


    'RECUPERO DEI CAMPI
    if instr(Intestazione,"noattach") > 0 then
    noattach = ContenutoFile
    end if

    if instr(Intestazione,"titolo") > 0 then
    titolo = ContenutoFile
    end if

    if instr(Intestazione,"attach") > 0 then
    attach = ContenutoFile
    end if

    if instr(Intestazione,"attach2") > 0 then
    attach2 = ContenutoFile
    end if


    'RECUPERO L'ATTACH -SE PRESENTE- E LO SCRIVO SU DB, O LO SVUOTO E CANCELLO IL FILE PRESENTE IN CARTELLA
    if noattach <> "no" then
    if instr(Intestazione,"file1") > 0 then
    i = instr(Intestazione,"filename=")
    j = instr(i + 10,Intestazione,chr(34))
    NomeUpload = mid(Intestazione,i + 10,j-i-10)
    i = instrRev(NomeUpload,"\")
    if i<>0 then
    NomeFile = mid(NomeUpload,i + 1)
    else
    NomeFile = NomeUpload
    end if
    if i<>0 then
    Set FSO = server.CreateObject("Scripting.FileSystemObject")
    Upload1 = True
    DimensioneFile1 = len(ContenutoFile)
    EstensioneFile1 = right(ContenutoFile,3)
    NomeFile1 = NomeFile
    Set textStream = FSO.CreateTextFile(server.mappath(percorso & NomeFile1), True, False)
    textStream.Write ContenutoFile
    textStream.Close
    Set textStream = Nothing
    Set FSO = Nothing
    elseif i = 0 then
    NomeFile1 = attach
    end if
    end if
    else
    'ELIMINA VECCHIO FILE
    set FSO = server.CreateObject("Scripting.FileSystemObject")
    'FSO.DeleteFile Server.Mappath(("../upload/")&attach2)
    'FSO.DeleteFile ("C:\Inetpub\wwwroot\filcea\upload\t.txt ")
    set FSO = nothing
    NomeFile1 = ""
    end if

    next

    End if
    %>

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.