Problema nome file su upload

  • Creatore Discussione Creatore Discussione drblis
  • Data di inizio Data di inizio

drblis

Nuovo Utente
31 Lug 2008
21
0
0
Ciao a tutti aruba mi ha fornito uno script per l'upload di immagini e vorrei modoficarne alcune parti in base alle ie esigenze. Sto facendo una specie di blog dove ogni utente può mettere la sua foto (ma solo una). Qui il mio problema. Vorrei che quando lui sceglie l'immagine dal suo hard disk e la carica quest'ultima acquisti il nome della sua sessione (se si collega l'utente pippo e carica un immagine imm.jpg, quest'ultima finisca sul server col nome pippo.jpg). Il problema che lo script è un po' complicato per me (sono un principiante!) e non riesco a trovare la parte di codice che mi permette tale azione...mi aiutate? vi posto il codice

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 = True
	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 � filtrata
		If Not IsNull(imaxSize) AND IsNumeric(imaxSize) AND imaxSize <> "" Then
			'Se la somma delle dimensioni dei file � maggiore a quella impostata genera ERRORE
			If Request.TotalBytes > imaxSize Then
				Error = True
				errorDesc = errorDesc & "La somma delle dimensioni dei file � pi� grande di " & imaxSize & " byte" & "<br>"
				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 = Session("username")
				
				'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 � 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 & ")" & "<br>"
  				  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 � filtrata allora pu� 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)<br>"
      				  	'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� 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 � filtrata allora pu� 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)<br>"
      				  	'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<br>"
      		  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
%>


Vi ringrazio anticipatamente!!!

Ciaoooo
 
Grazie mille, ma come faccio non sapendo il nome del file uppato?
Codice:
<%
    Dim fso
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    fso.MoveFile([b]"C:\test.html"[/b], "C:\rinominato.html")
    Set fso = Nothing
%>

Gli utenti caricano file dei quali ignoro il nome
 
Lo so che lo ignori ma lo puoi recuperare facendo uno split della stringa che ricevi in input nel type="file":

C:\Documents and Settings\TuoComputer\Documenti\Immagini\NomeFile.jpg

Puoi risalire a "NomeFile.jpg" facendo lo Split della stringa in funzione del carattere "\".

Provo a scrivere un esempio senza testarlo. Nella variabile "stringa" c'è il percorso locale del file uppato, ok?


Dim stringa, arr_str, nome_file_da_rinominare
stringa = Request.Form("stringa")
arr_str = Split(stringa, "\")
nome_file_da_rinominare = arr_str(UBound(arr_str))

Chiaro?

Giocaci un po :)
 

Discussioni simili