webForumDet fria alternativet

Uploadscript utan komponent

ASP

307 svar · 16 577 visningar · startad av OveRRidE · sida 11 av 16

Frågan, av OveRRidE

Jag har (äntligen?) lagt till ett uploadscript här eftersom jag inte fått ändan ur vagnen att göra det innan. Scriptet är helt komponentlöst, vilket jag tror ganska många har användning av ibland om det inte finns ordentliga komponenter installerade på servern. (Vilket det visserligen oftast finns ;)) Buggar eller problem rapporteras i de

Läs frågan i sin helhet →
Medlem sedan juli 20033 147 inlägg
#201

Fast nu så går det inte o uploada alls pga. att If satsen utförs även om det inte finns en fil i katalogen..

Medlem sedan maj 2003352 inlägg
#202

solbulle >> Det var skitsamma med det felet...

Jaha, haha, nejdå. Tyckte inte att det var någon riktig hjälp när jag själv inte riktigt förstod vad jag ville ha hjälp med... lr nåt :)

Medlem sedan mars 20015 287 inlägg
#203

Melea: Anledningen till att dety inte fungerar är väl att du gör kollen efter att du laddat upp filen...

Du lär väl till att behöva sätta den där kollen innan du laddar upp den nya filen.
Flytta upp kollen med FSO till precis under denna rad:

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

k0ffe: Hmm.

Medlem sedan mars 20015 287 inlägg
#204
<!-- #include file="../../data.inc" -->
<%

Response.Expires=0
Response.Buffer = TRUE
Response.Clear
'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
byteCount = Request.TotalBytes
'Response.BinaryWrite(Request.BinaryRead(varByteCount))

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin

username =  UploadRequest.Item("username").Item("Value")
info =  UploadRequest.Item("info").Item("Value")
player1 =  UploadRequest.Item("player1").Item("Value")
player2 = UploadRequest.Item("player2").Item("Value")
player1race = UploadRequest.Item("player1race").Item("Value")
player2race = UploadRequest.Item("player2race").Item("Value")
map = UploadRequest.Item("map").Item("Value")

contentType = UploadRequest.Item("filename").Item("ContentType")
filepathname = UploadRequest.Item("filename").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("filename").Item("Value")

'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

If ScriptObject.FileExists(server.mappath(("/Creative/warcraft/replays/" & filename)) then

Session("fel") = "Det finns redan en replay med det namnet"
Response.Redirect "../admin.asp?login=yes&add=replay"

Else

'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
' Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&filename)
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("/Creative/warcraft/replays/" & filename))

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={MySQL ODBC 3.51 Driver};server="&strserver&";uid="&struser&";pwd="&strpass&";database="&strdb&"" 

	sql = "insert into wc3_replay (filename, username, info, player1, player2, player1race, player2race, map, datum) values ('" & filename & "', '" & username & "', '" & info & "','" & player1 & "','" & player2 & "', '" & player1race & "','" & player2race & "','" & map & "','" & datum & "')"
	Connect.Execute(sql),,128

	Connect.Close : Set objConnect = Nothing

MyFile.Close

End If
Response.Redirect "../admin.asp?login=yes&add=replay"

Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value 
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl 
'Loop to next object
  BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop

End Sub

'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function

'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1))) 
Next
End Function
%>
Medlem sedan juli 20033 147 inlägg
#205

Det var där jag la koden men det funkar fortfarande inte...

Medlem sedan mars 20015 287 inlägg
#206

Ok... jag tyckte inte det såg ut som det, jag trodde du hade gjort som du visade här: http://www.webforum.nu/showthread.php?s=&postid=683135#post683135

Medlem sedan juli 20033 147 inlägg
#207

Hm, jag flyttade om koden lite själv efteråt.. men de funkade inte :OO

Medlem sedan juli 20033 147 inlägg
#208

Jahapp, tar upp en gammal tråd :-)

Skulle vilja ha så man kan uploada GIF filer också.. just nu har jag den här koden:

If NOT contentType="image/pjpeg" THEN
Session("fel") = "Det måste vara JPG!"
Response.Redirect "../admin.asp?login=yes&show=picture&editID=" & editID & " "
End If
Medlem sedan juli 20033 147 inlägg
#209

Vore också bra om man kunde byta namn på filen automatiskt när man uploadar den till sitt ID

Medlem sedan juli 20033 147 inlägg
#210

Har fått svar på de här 2 senaste frågorna, nevermind :P

Medlem sedan maj 2003352 inlägg
#211

Flera bilder!

Jag har ett litet problem, om man vill ladda upp flera bilder med hjälp av detta skript, hur ska man då gå tillväga? Har prövat lite olika saker men utan att lyckas...

Den som är inloggad ska kunna skapa ett nytt "galleri", först skriva en rubrik för galleriet, som sedan ska länka till bilderna som skribenten efter att ha skrivit rubriken skall kunna ladda upp.

Hoppas nån förstod vad jag menar.

Medlem sedan mars 20015 287 inlägg
Medlem sedan maj 2003352 inlägg
#213

Ja, jo, men hur får man in resten? Det är ju samma script, bara att du inte är tvungen att ladda upp en bild för att gå vidare?

Utförligare förklaring uppskattas...

Medlem sedan maj 2003352 inlägg
#214

*host*
Glöm det jag skrev...

Medlem sedan mars 20015 287 inlägg
#215

Jag förstår inte frågan.

Medlem sedan maj 2003352 inlägg
#216

Hur gör jag nu för att få in bildernas namn i databasen? Eftersom alla heter "Filename" blev jag lite förvirrad...

Exempel:

Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; "&_
"Data Source="&Server.MapPath("ncjcj")

SQLStmt = "INSERT INTO bildarkiv (nyh_bild1, nyh_bild2, rubrik, forfattare) "
SQLStmt = SQLStmt & "VALUES('" & filename & "', '" & filename & "', '" & rubrik & "', '" & Session("Namn") & "') "

Set RS = Connection.Execute(SQLStmt)

Medlem sedan mars 20015 287 inlägg
#217

Är det andra fält än just filen så har ju de fälten andra namn...
Annars om du kör varianten med en loop så kanske du kan lägga filnamnet i olika variabelnamn för varje varv loopen gör... Lite luddigt kanske..

Medlem sedan maj 2003352 inlägg
#218

Ok, men jag gjorde på ett annat sätt.
Jag skapade en ny tabell för bara bilderna, så dom får läggas till med separat ID i en egen tabell.

Problemet är ju bara det, att när jag nu har rubrik, forfattare etc i en tabell, och själva bilderna i en annan, så följer ju inte bilderna med som dom ska med querystring.

T.ex

Rubrik 1 - 7 bilder (2 bilder)
Rubrik 2 - 5 bilder (3 bilder)
Rubrik 3 - 2 bilder

Är du med solis?

Medlem sedan mars 20015 287 inlägg
#219

Det är helt klart för varmt för mig idag...

Men om det är som så att du har flera bilder till en artikel/rubrik så tycker jag att en relationstabell är en bra lösning.

tblartikelbild

id - bildid - rubrikid

Medlem sedan maj 2003352 inlägg
#220

Ok, det har jag försökt med, utan att lyckas :(

Den ena tabellen heter bildarkiv.

forfattare rubrik arkiv datum

Och den andra heter visa_bild.

bild ID datum

Jag vet inte hur jag ska få till det...

263 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)