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

    Rinominare file durante upload

    Salve a tutti,
    uso da parechcio tempo un sistema di upload (trovato qui e leggermente modificato) che non mi da nesusn problema.

    Ora però i problemi sono apparsi durante la rinominazione del file.
    Mi spiego, all'atto dell'inserimento del record e della relativa imamgine nel db (ovviamente solo il riferimento all'immagine), il nome del file mi viene rinominato correttamente.
    Quando però vado a modificare il record e voglio cambiare l'immagine, il codice che ho creato mi verifica se è già presente un'immagine, preleva il nome (senza estensione) e lo attribuisce alla nuova immagine che carico. Viceversa se non è presente nessuna immagine, semplicemente carica la nuova immagine rinominandola. Così facendo per quel record ho il nome dell'immagine sempre uguale (e diverso da qualsiasi altra immagine di qualsiasi altro record).

    Il problema che non riesco a capire, è perchè se mi trova già un'immagine, non attribuisca alla nuova immagine lo stesso nome.
    Vi posto un po' di codice così è più chiaro:

    codice:
    Dim percorso_agg
    percorso_agg = "images/"
    
    ByteRicevuti = Request.TotalBytes
    
    if ByteRicevuti > 0 then
    	DatiRicevuti = Request.BinaryRead(ByteRicevuti)
    	FileBinario = RSBinaryToString(DatiRicevuti)
    	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,"img1_old") > 0 then							' nome immagine1 già sul server
    			img1_old = ContenutoFile
    		end if
    				
    		if instr(Intestazione,"data_ins") > 0 then
    			data_ins = ContenutoFile
    		end if
    		
    		if instr(Intestazione,"id") > 0 then
    			id = ContenutoFile
    		end if
    		
    		if instr(Intestazione,"ora") > 0 then
    			ora = ContenutoFile
    		end if
    		
    		if instr(Intestazione,"sezione") > 0 then
    			sezione = ContenutoFile
    			sezione = replace(sezione, "'", "''")
    		end if
    		
    		
    		' Qui recupero il file da uploadare (se presente) e lo scrivo
    		' sul server
    		
    		'FILE 1
    		
    		if instr(Intestazione,"img1") > 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)
    					If instr(Intestazione,"img1_old") > 0 then
    						NomeFile1 = img1_old & right(NomeUpload,4)
    					Else
    						NomeFile1 = "img1_" & sezione & "_" & data_ins & "_" & ora & right(NomeUpload,4)
    					End If     			Set textStream = FSO.CreateTextFile(server.mappath(percorso_agg & NomeFile1), True, False)
        			textStream.Write ContenutoFile
        			textStream.Close
        			Set textStream = Nothing
    	   			Set FSO = Nothing
        	   end if
    		end if
    In neretto il controllo se il campo img1_old è compilato o meno. Se lo è, attribuisce alla variabile NomeFile1 il valore di img1_old e l'estensione del file effettivamente uploaddato. Altrimenti attribuisce a NomeFile1 il valore di un certo numero di variabili.

    Purtroppo nonostante il controllo, l'immagine uploaddata viene sempre e comunque rinominata secondo la condizione Else, anche se img1_old è maggiore di 0 (zero).

    Qualcuno ha qualche suggerimento?

    Grazie 10.000

  2. #2
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    prova a personalizzarti questa:
    codice:
    Set gFS = CreateObject("Scripting.FileSystemObject")
            if gFS.FileExists (server.mapPath("Public/Upload/" & Form("File1").FileName)) then
            
    			Counter = UploadID
    			NewFileName = Form("File1").FileName
    			NewFileName = Counter & "-" & NewFileName 
    			 
                gFS.CopyFile (server.mapPath("Public/Upload/" & Form("File1").FileName)),(server.mapPath("Public/Upload/"& NewFileName &""))
        set gFS = nothing
            end if

  3. #3
    Ciò che suggerisci tu, è di verificare se il file esiste.
    Io invece faccio un controllo se il file esiste come riferimento sul db, per prelevarne il nome ed attribuirlo al nuovo file che voglio uploaddare (che nella maggior parte dei casi va a sostituire quello già presente sul server).
    Però la condizione in grassetto nel codice che ho postato per qualche strano motivo non viene verificata, nonostante il campo da verificare sia popolato (e se lo stampo a video viene correttamente riportato).

  4. #4
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Originariamente inviato da Dirk Pitt
    Ciò che suggerisci tu, è di verificare se il file esiste.
    Io invece faccio un controllo se il file esiste come riferimento sul db, per prelevarne il nome ed attribuirlo al nuovo file che voglio uploaddare (che nella maggior parte dei casi va a sostituire quello già presente sul server).
    Però la condizione in grassetto nel codice che ho postato per qualche strano motivo non viene verificata, nonostante il campo da verificare sia popolato (e se lo stampo a video viene correttamente riportato).
    Scusa ma cosa cambia? :master:

    Se fai il controllo sul nome del file del db (ho capito bene?) o se il file con quel nome fisicamente già esiste sul server ?

  5. #5
    Nella pagina dove effettuo le modifiche, ho il campo hidden che ha come valore il nome del file a db (senza estensione), valore che viene passato (e recuperato) nel codice che ho postato.
    Se invece procedo come consigli tu, andando a controllare "fisicamente" se il file esiste per poi estrarne solo il nome senza l'estensione, il tempo si allunga. Io il nome del file ce l'ho già, unico problema è che per qualche strano motivo, la condizione if non viene verificata.

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.