Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581

    Ricavare il nome del campo di un form, con una classe

    ciao a tutti
    ho questa classe per l'upload:
    codice:
    <%
    '***************************************
    ' File:	  Upload.asp
    ' Author: Jacob "Beezle" Gilley
    ' Email:  avis7@airmail.net
    ' Date:   12/07/2000
    ' Comments: The code for the Upload, CByteString, 
    '			CWideString	subroutines was originally 
    '			written by Philippe Collignon...or so 
    '			he claims. Also, I am not responsible
    '			for any ill effects this script may
    '			cause and provide this script "AS IS".
    '			Enjoy!
    '****************************************
    
    Class FileUploader
    	Public  Files
    	Private mcolFormElem
    
    	Private Sub Class_Initialize()
    		Set Files = Server.CreateObject("Scripting.Dictionary")
    		Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    	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 Default Sub Upload()
    		Dim biData, sInputName
    		Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    		Dim nPosFile, nPosBound
    
    		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)
    		
    		Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
    			
    			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
    				Set oUploadFile = New UploadedFile
    				
    				nPosBegin = nPosFile + 10
    				nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
    				sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    				oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
    
    				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 Then Files.Add LCase(sInputName), oUploadFile
    			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 FileData
    	
    	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
    		
    		Set oFile = oFS.CreateTextFile(sPath & FileName, True)
    		
    		For nIndex = 1 to LenB(FileData)
    		    oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
    		Next
    
    		oFile.Close
    	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
    %>
    la sua form di inserimento dati:
    codice:
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    <TITLE></TITLE>
    </HEAD>
    <BODY>
    <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadexmple.asp">
    	<TABLE BORDER=0>
    	<tr><td>Enter your fullname:
    <INPUT TYPE=TEXT SIZE=40 NAME="FULLNAME"></td></tr>
    	<tr><td>Select a file to upload:
    <INPUT TYPE=FILE SIZE=50 NAME="FILE1"></td></tr>
    	<tr><td>Save To:
    		Disk<INPUT TYPE=RADIO NAME="saveto" value="disk" checked>
    		Database<INPUT TYPE=RADIO NAME="saveto" value="database">
    	</td></tr>
    	<tr><td align="center"><INPUT TYPE=SUBMIT VALUE="Upload!"></td></tr>
    	</TABLE>
    </FORM>
    </BODY>
    </HTML>
    e la relativa pagina di riepilogo dei risultati:
    codice:
    <%@ Language=VBScript %>
    <%Option Explicit%>
    
    <%
    
    'NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
    '	   FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
    '	   FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
    '	   OR LATER.
    
    
    ' Create the FileUploader
    Dim Uploader, File
    Set Uploader = New FileUploader
    
    ' This starts the upload process
    Uploader.Upload()
    
    '******************************************
    ' Use [FileUploader object].Form to access 
    ' additional form variables submitted with
    ' the file upload(s). (used below)
    '******************************************
    Response.Write "Thank you for your upload " & Uploader.Form("fullname") & "
    "
    
    ' Check if any files were uploaded
    If Uploader.Files.Count = 0 Then
    	Response.Write "File(s) not uploaded."
    Else
    	' Loop through the uploaded files
    	For Each File In Uploader.Files.Items
    		
    		' Check where the user wants to save the file
    		If Uploader.Form("saveto") = "disk" Then
    	
    			' Save the file
    			File.SaveToDisk "C:\inetpub\wwwroot\fileUploader\"
    	
    		ElseIf Uploader.Form("saveto") = "database" Then
    			
    			' Open the table you are saving the file to
    			Set RS = Server.CreateObject("ADODB.Recordset")
    			RS.Open "MyUploadTable", "CONNECT STRING OR ADO.Connection", 2, 2
    			RS.AddNew ' create a new record
    			
    			RS("filename")    = File.FileName
    			RS("filesize")	  = File.FileSize
    			RS("contenttype") = File.ContentType
    		
    			' Save the file to the database
    			File.SaveToDatabase RS("filedata")
    			
    			' Commit the changes and close
    			RS.Update
    			RS.Close
    		End If
    		
    		' Output the file details to the browser
    		Response.Write "File Uploaded: " & File.FileName & "
    "
    		Response.Write "Size: " & File.FileSize & " bytes
    "
    		Response.Write "Type: " & File.ContentType & "
    
    "
    	Next
    End If
    
    %>
    ho già pulito la classe da cose che non mi servivano come l'aggiunta a db, a me serviva solo per scrivere sul server


    Però avrei la necessità di poter inviare più di un file, presumo una decina, e questo script da quanto ci ho capito, non mi restituisce il nome del campo file
    In particolare dovrei fare determinate operazioni in base al nome del campo file, quindi FILE1, FILE2, FILE3 ecc ecc

    esiste un modo o una porzione di codice da aggiungere per far si di ricavare anche il nome del campo file?

    tnx mille

  2. #2
    datti all'upload di baol (trovi il link nella firma di Baol74)

  3. #3
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    se non mi faceva comodo utilizzare questo non postavo ... !!!
    so anch'io che esiste quello di Baol

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.