webForumDet fria alternativet

Klassisk ASP, byta tecken på fil

ASP

7 svar · 1 042 visningar · startad av civilpolisen

Medlem sedan dec. 2009872 inlägg
Frågan#1

http://www.aspupload.com/manual_misc.html

Hur gör jag för att byta tecken i filer som laddas upp??
Jag har ännu inte klurat ut det...

	' ## NO OVERWRITE
	Upload.OverwriteFiles = False

	' ## SAVE FILE
	Upload.Save Server.MapPath("\pdf\") & "\"

	' ## Obtain file object
	Set File = Upload.Files("FILE1")
	' ## REPLACE CHARACTERS
	DIM myFileName
	myFileName = File.Filename
	myFileName = replace() <---- detta blir fel då filen redan är uppladdad!!
	
	IF NOT File IS NOTHING THEN
stoppa in i databasen...
Medlem sedan juni 200032 967 inlägg
Medlem sedan dec. 2009872 inlägg
#3

FSO får det bli.

Tack för det! :-)

Medlem sedan dec. 2009872 inlägg
#4

Om det är nån som vill ha. Går säkert att göra snyggare, men det fungerar i alla fall. Funkar bra för ändamålet! :-)

IF request("dbaction") = "insert" THEN

	' ## NO OVERWRITE
	Upload.OverwriteFiles = False

	' ## SAVE FILE
	Upload.Save Server.MapPath("\pdf\") & "\"

	' ## Obtain file object
	Set File = Upload.Files("FILE1")
	
	IF NOT File IS NOTHING THEN
		' ## REPLACE CHARACTERS USING FSO
		DIM myFileName
		myFileName = File.Filename
		myFileName = replace(myFileName, " ", "_")

		myFileName = replace(myFileName, "Å", "A")
		myFileName = replace(myFileName, "Ä", "A")
		myFileName = replace(myFileName, "Ö", "O")
		myFileName = replace(myFileName, "å", "a")
		myFileName = replace(myFileName, "ä", "a")
		myFileName = replace(myFileName, "ö", "o")
		
		myFileName = replace(myFileName, "Ü", "U")
		myFileName = replace(myFileName, "ü", "u")

		' ## CHECK FOR FREE NAME
		set fso = CreateObject("Scripting.FileSystemObject") 
		IF fso.fileExists( Server.MapPath("\pdf\") & "\" & myFileName )  THEN
			myArrayXX = split( myFileName, ".", -1, 1)

			strFileName = myArrayXX(0)& "_"
			intCounter  = 1
			strExt      =  "." & myArrayXX(1)
			myFileName = strFileName & intCounter & strExt
			
			' ## CHECK FOR DUPLICATES
			WHILE fso.fileExists( Server.MapPath("\pdf\") & "\" & myFileName )
				myFileName = strFileName & CInt(intCounter) +1 & strExt
				intCounter = intCounter + 1
			WEND
		END IF
		set fso = Nothing

		' ## REPLACE FILE
		' ## SOURCE: http://classicasp.aspfaq.com/files/directories-fso/can-i-rename-a-file-using-filesystemobject.html
		set fso = CreateObject("Scripting.FileSystemObject") 
		fso.MoveFile Server.MapPath("\pdf\") & "\" & File.Filename , Server.MapPath("\pdf\") & "\" & myFileName
		set fso = Nothing
		
	  ' ## NEW POST
	  SQL = "INSERT INTO [" & myTable & "] (intCatalogueSEID, strName, dteCreated, dteViewFrom, dteViewTo, " _
		& " strFileName, intFilesize, intSortfield, bolView) SELECT " _
		& myID & ", '" _
		& myFileName & "', #" _
		& date() & "#, #" & date() & "#, #" & date() & "#, '" _
		& myFileName & "', " _
		& File.Size & ", " _
		& " (COUNT(*)+1), TRUE FROM [" & myTable & "] WHERE intCatalogueSEID = " & myID & ";"

  	Conn.Execute(SQL)
 ' 	Response.Write "File saved."
	ELSE
	'  Response.Write "File not selected."
	END IF
	
END IF
Medlem sedan juni 200032 967 inlägg
#5

Även om hela replace-delen säkert skulle gå bra att göra med ett reguljärt uttryck istället hade jag gjort hela filnamnsbytet i en egen funktion istället. Det känns inte så vackert att ha hela det där kodstycket inne i loopen. :)

mvh

Medlem sedan dec. 2009872 inlägg
#6

Öhh... det är ju samma kod fast inte på samma ställe...(??) Eller vad menar du!?

Det blir ju inte MINDRE kod!?

Det blir möjligen estetiskt mer tilltalande, men det är inget man får betalt för direkt. Dessutom, det är 20 rader... Orka bry sig.

Det är ingen loop. Koden exekveras bara EN gång för man kan bara ladda upp en fil åt gången. (Syns iofs inte i den bifogade koden, men så är det.)

Medlem sedan juni 200032 967 inlägg
#7

Förlåt, inte loop.

Vad spelar det för roll om det blir mindre kod? Man är väl ute efter att göra BRA kod. :)

"Refactoring" och "återanvändbarhet" är sköna ord i min värld (åtminstone om man har någon sorts yrkesstolthet) - men i gammal ASP är det kanske inte mycket värt? :)

Medlem sedan dec. 2009872 inlägg
#8

Allright.

Jag säger som det är, jag har kopierat denna koden från annan plats... Den är redan återanvänd.

Jag håller med dig i sak, men nu orkar jag inte göra det där snyggare primärt av två anledningar:
1. Ingen kommer tacka mig för det.
2. "If it works don't touch it."

Dessutom är det aldrig någon som ser koden förutom när jag dristar mig till att posta koden i offentliga forum som detta!! :-)

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)