Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Problema Upload con Access DB

    Buongiorno a tutti,
    sono un nuovo utente di HTML.it, e ho deciso di rivolgermi a questa comunity per tentare di risolvere il mio problema.

    Ho creato una pagina di Upload files in ASP VBscript, che dovrebbe salvare dei file, selezionati tramite voce "Sfoglia", nella cartella remota "Documenti". Nello stesso momento, dovrebbe salvare il nome del file all'interno della tabella "Documenti" del DB Access, in modo da poter poi richiamare quel nome del file nella pagina "Download" in automatico.

    Il mio problema è il seguente:
    tutto questo ambaradam funziona a metà, ovvero, quando avvio l'upload dei file mi viene restituito l'errore seguente:

    codice:
    Microsoft VBScript runtime  error '800a0005'
    
    Invalid procedure call or argument
    
    /File Include/class_upload.asp, line 344
    però il salvataggio del file all'interno della cartella remota avviene comunque; quello che non avviene è il salvataggio del nome del file all'interno del database, per cui nemmeno il richiamo automatico nella pagina Download avviene, poichè trova il record del database vuoto.

    Questo problema me lo da con la stragrande maggioranza di file, ma ad esempio i file .rtf (di word) o .csv (di excel) funzionano; mentre per i file .pdf, .doc, .jpg e così via (insomma i più importanti e frequenti) non funziona.

    Vi metto in allegato le pagine da me create e il FileInclude che ho utilizzato per effettuare l'upload, sperando che possiate aiutarmi.
    >>File<<

    Grazie in anticipo.

  2. #2
    Nessuno può darmi una mano?

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A) posta qui lo script asp
    B) posta il link alla pagina pubblica
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Cambia script di upload, probabile che il tuo hoster abbia già un componente per effettuare l'upload che puoi utulizzare.

    Roby

  5. #5
    Li avevo messi scaricabili nel primo post perchè probabilmente sono troppo lunghi.
    Comunque lo script è questo:
    codice:
    Class FileUploader
    	Public  Files
    	Private mcolFormElem
    	Private imaxSize
    	Private imaxFileSize
    	Private bOverWrite
    	Public  fileExt
    	Public  error
    	Public  errorDesc
    	
    	Private Sub Class_Initialize()
    		Set Files = Server.CreateObject("Scripting.Dictionary")
    		Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    		bOverWrite = False
    	End Sub
    	
    	Private Sub Class_Terminate()
    		If IsObject(Files) Then
    			Files.RemoveAll()
    			Set Files = Nothing
    		End If
    		If IsObject(mcolFormElem) Then
    			mcolFormElem.RemoveAll()
    			Set mcolFormElem = Nothing
    		End If
    	End Sub
    
    	Public Property Get Form(sIndex)
    		Form = ""
    		If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    	End Property
    	
    	Public Property Let maxFileSize(iSize)
    	  imaxFileSize = iSize
    	End Property
    	
    	Public Property Get maxFileSize
    	  maxFileSize = imaxFileSize
    	End Property	
    
    	Public Property Let maxSize(iSize)
    	  imaxSize = iSize
    	End Property
    
    	Public Property Get maxSize
    	  maxSize = imaxSize
    	End Property
    	
    	Public Property Let OverWrite(bValue)
    	  bOverWrite = bValue
    	End Property
    
    	Public Property Get OverWrite
    	  OverWrite = bOverWrite
    	End Property		
    	
    	Public Default Sub Upload()
    		Dim biData, sInputName
    		Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    		Dim nPosFile, nPosBound
        Dim counter
    
    		error = False
    		errorDesc = ""
    		
    		'Se la somma delle dimensioni dei file &egrave; filtrata
    		If Not IsNull(imaxSize) AND IsNumeric(imaxSize) AND imaxSize <> "" Then
    			'Se la somma delle dimensioni dei file &egrave; maggiore a quella impostata genera ERRORE
    			If Request.TotalBytes > imaxSize Then
    				Error = True
    				errorDesc = errorDesc & "La somma delle dimensioni dei file &egrave; pi&ugrave; grande di " & imaxSize & " byte" & "
    "
    				Exit Sub
    			End If
    		End If
    
    		biData = Request.BinaryRead(Request.TotalBytes)
    
    		nPosBegin = 1
    		nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    		
    		If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
    		 
    		vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    		nDataBoundPos = InstrB(1, biData, vDataBounds)
    		
    		'contatore dei file
    		counter = 0
    
    		'Cicla i dati contenenti le informazioni dei file
    		Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
    		
    		  counter = counter + 1	
    		  
    			nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
    			nPos = InstrB(nPos, biData, CByteString("name="))
    			nPosBegin = nPos + 6
    			nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    			sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    			nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
    			nPosBound = InstrB(nPosEnd, biData, vDataBounds)
    			
    			If nPosFile <> 0 And  nPosFile < nPosBound Then
    				Dim oUploadFile, sFileName, sFileName1, sFileExt, dotpos
    				Set oUploadFile = New UploadedFile
    				
    				nPosBegin = nPosFile + 10
    				nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
    				
    				sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    				
    				'Se le estensioni sono filtrate
    				If Not IsNull(fileExt) Then
    
      				'Se il campo file del form contiene un file prosegui
      				If sFileName <> "" Then
      				
    				    'Ricaviamo nome completo, nome senza estensione, estensione
    				    sFileName1 = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))  				
        				dotpos = 0
        				dotpos = InStrRev(sFileName1, ".")
        				oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\")) 'nome completo
        				oUploadFile.FileExt = Right(sFileName1, Len(sFileName1) - dotpos)                'estensione
        				oUploadFile.FileNameShort = Left(sFileName1, dotpos-1)                           'nome senza estensione
        				oUploadFile.OverWrite = bOverWrite
        				
        				sfileExt = oUploadFile.FileExt				
    
      				  'Se l'estensione non &egrave; tra quelle ammesse genera ERRORE
      				  If Instr(fileExt, sFileExt) = 0 Then
      				  	Error = True
      				  	errorDesc = errorDesc & "File #" & counter & "(" & oUploadFile.FileName & "): tipo di file non ammesso (solo " & fileExt & ")" & "
    "
      				  Else
          				nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
          				nPosBegin = nPos + 14
          				nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
          				
          				oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
          				
          				nPosBegin = nPosEnd+4
          				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
          				oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
          				
          				'If (oUploadFile.FileSize > 0) AND (oUploadFile.FileSize <= imaxFileSize) Then Files.Add LCase(sInputName), oUploadFile
          				
                  'Se la dimensione max per il singolo file non &egrave; filtrata allora pu&ograve; essere caricato
          				If Not IsNull(imaxFileSize) AND IsNumeric(imaxFileSize) AND imaxFileSize <> "" Then
          				
          				  'Se il file supera la dimensione max ammessa per il singolo file allora genera ERRORE
            				If oUploadFile.FileSize > imaxFileSize Then
          	 			  	Error = True
          				  	errorDesc = errorDesc & "File #" & counter & "(" & oUploadFile.FileName & "): dimensione file non ammessa (max: " & imaxFileSize & " bytes)
    "
          				  	'Exit Sub
          				  Else
          				    Files.Add counter-1, oUploadFile
          				    'Files.Add LCase(sInputName), oUploadFile
          				  End If				
          				Else
          				  Files.Add counter-1, oUploadFile
          				  'Files.Add LCase(sInputName), oUploadFile      				
          				End If
      				  End If
    
      				End If
    
    				'Se le estensioni non sono filtrate carica tutti i file
    				Else
    
      				'Se il campo file del form contiene un file prosegui
      				If sFileName <> "" Then
      				
    				    sFileName1 = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))  				
        				dotpos = 0
        				dotpos = InStrRev(sFileName1, ".")
        				
                'Se il file ha un estensione qualsiasi pu&ograve; essere caricato
        				If dotpos > 0 AND dotpos < Len(sFileName1) Then
          				oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
          				oUploadFile.FileExt = Right(sFileName1, Len(sFileName1) - dotpos)
          				oUploadFile.FileNameShort = Left(sFileName1, dotpos-1)
          				oUploadFile.OverWrite = bOverWrite
          				
          				sfileExt = Right(sFileName1, Len(sFileName1) - InStrRev(sFileName1, "."))				
      
          				nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
          				nPosBegin = nPos + 14
          				nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
          				
          				oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
          				
          				nPosBegin = nPosEnd+4
          				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
          				oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
          				
        				  'Se la dimensione max per il singolo file non &egrave; filtrata allora pu&ograve; essere caricato
          				If Not IsNull(imaxFileSize) AND IsNumeric(imaxFileSize) AND imaxFileSize <> "" Then
    
        				    'Se il file supera la dimensione max ammessa per il singolo file allora genera ERRORE
            				If oUploadFile.FileSize > imaxFileSize Then
          	 			  	Error = True
          				  	errorDesc = errorDesc & "File #" & counter & "(" & oUploadFile.FileName & "): dimensione file non ammessa (max: " & imaxFileSize & " bytes)
    "
          				  	'Exit Sub
          				  Else
          				    Files.Add counter-1, oUploadFile
          				    'Files.Add LCase(sInputName), oUploadFile
          				  End If				
          				Else
          				  Files.Add counter-1, oUploadFile
          				  'Files.Add LCase(sInputName), oUploadFile      				
          				End If			
    
                'Se il file non ha estensione genera ERRORE      		
          			Else
      	 			  	Error = True
      				  	errorDesc = errorDesc & "File #" & counter & "(" & sFileName1 & "): file senza estensione
    "
          		  End If
    
      				End If
    
    				End If
    			Else
    				nPos = InstrB(nPos, biData, CByteString(Chr(13)))
    				nPosBegin = nPos + 4
    				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
    				If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    			End If
    
    			nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
    		Loop
    	End Sub
    
    	'String to byte string conversion
    	Private Function CByteString(sString)
    		Dim nIndex
    		For nIndex = 1 to Len(sString)
    		   CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
    		Next
    	End Function
    
    	'Byte string to string conversion
    	Private Function CWideString(bsString)
    		Dim nIndex
    		CWideString =""
    		For nIndex = 1 to LenB(bsString)
    		   CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1))) 
    		Next
    	End Function
    End Class
    
    Class UploadedFile
    	Public ContentType
    	Public FileName
    	Public FileNameShort
    	Public FileExt
    	Public FileData
    	Public OverWrite
    	
    	Public Property Get FileSize()
    		FileSize = LenB(FileData)
    	End Property
    
    	Public Sub SaveToDisk(sPath)
    		Dim oFS, oFile
    		Dim nIndex
    	
    		If sPath = "" Or FileName = "" Then Exit Sub
    		If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
    	
    		Set oFS = Server.CreateObject("Scripting.FileSystemObject")
    		If Not oFS.FolderExists(sPath) Then Exit Sub
    		
    		back = ""
    
    		If Not OverWrite Then
    		  i = 0
    		
    		  Do While oFS.FileExists(sPath & FileNameShort & back & "." & FileExt)
    		    i = i + 1
    		    back = CStr(i)
    		  Loop
    		End If
    		
    		Set oFile = oFS.CreateTextFile(sPath & FileNameShort & back & "." & FileExt, True)
    		
    		For nIndex = 1 to LenB(FileData)
    	        oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
    		Next
    		oFile.Close
    		
    		Set oFS = Nothing
    	End Sub
    	
    	Public Sub SaveToDatabase(ByRef oField)
    		If LenB(FileData) = 0 Then Exit Sub
    		
    		If IsObject(oField) Then
    			oField.AppendChunk FileData
    		End If
    	End Sub
    
    End Class
    L'errore me lo da nella parte messa in rosso.
    Mentre la pagina pubblica sta in una zona protetta da username e password...

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Come diceva Roby sicuro che sul server non ci sia un script upload "consigliato"?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Il sito sta su server windows aruba, e ho dato anche un'occhiata ai file del vademecum aruba quelli Persist, ma sinceramente non so come poterli collegare x il mio problema, quello fa solo upload di immagini o sbaglio?

  8. #8

  9. #9
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Quello della persists va benissimo.
    Recuperi il nome del file caricato e lo salvi nel db.

    Roby

  10. #10
    Ora farò delle prove e vi farò sapere, grazie molte

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.