webForumDet fria alternativet

Uploadscript utan komponent

307 svar · 16 553 visningar · startad av OveRRidE · sida 3 av 16

solbulleMedlem sedan mars 20015 287 inlägg
#41

Detta tror jag ska fungera, dock tycker jag helt klart att du ska sköta en första koll av att formuläret innehåller något direkt i formuläret med hjälp av javascript.
Annars måste ju killen mer eller mindre ladda upp sin fil innan man får felmesset.

<%
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

'Exempel på hur man kan 'plocka ner' andra forumlärelement
'email = UploadRequest.Item("email").Item("Value")

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

If namn = "" OR typ = "" then
response.write "Du måste välja en fil, skriva ett namn och välja typ av programmeringsspråk!"
Else

'Create FileSytemObject Component
  If byteCount<=50000 THEN

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

'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(filename))

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

MyFile.Close

response.write "<font face=Verdana size=1>Din fil är upladdad utan problem!<br><br></font>"
response.write "<font face=Verdana size=1><a href=java script:window.close()>Stäng</a></font>"

Datum = Now
SQL = "INSERT INTO script_upload ([namn], [datum], [av], [typ], [filnamn]) VALUES('" & namn & "',#"& Datum &"#,'" & session("anvandarnamn") & "','" & typ & "','" & filename & "')"
Databas.Execute(SQL)

else
response.write "Du har antingen en fil som inte har filändelse .jpg eller så är den större än 50 kb."
end if
end if
%>
MossaMedlem sedan dec. 200123 inlägg
#42

Var ska denna kodsnutt placeras?

Var och i vilken fil skall jag lägga in...

If contentType="image/pjpeg" THEN

som Toonster tipsade om? Kan ju iofs tänka mig att jag kan lägga det nästan varsomhelst (efter den har kollat filnamn o typ) men ändå - för att det inte ska vara bristfälligt!?

/Mossa

solbulleMedlem sedan mars 20015 287 inlägg
#43

Om du kikar på koden ovanför så skulle jag nog lagt det i anslutning till raden:

If byteCount<=50000 THEN

MossaMedlem sedan dec. 200123 inlägg
#44

Response.redirect

Om jag istället för respone.write "filen laddades upp ... " i slutet av koden vill ha respone.redirect (för att skicka till en helt ny sida efter att filen laddats upp eller till en ny sida med felmeddelande om filen är i fel format) så antar jag att det vållar lite problem med tanke på att upload.asp ligger som include i slutet? Och respone.redirect ligger innan det.

Hajjar ni? :)

/Mossa

MossaMedlem sedan dec. 200123 inlägg
#45

Verkar fungera iaf... trodde jag inte.

/Mossa

sin_adecMedlem sedan apr. 2002272 inlägg
#46

tänk om

tänk om medlemmarna laddar upp bilder i samma mapp och råkar ha samma namn...

är det ngn som vet en funktion som ändrar namnen på bilderna....

ToonsterMedlem sedan feb. 20001 590 inlägg
#47

Enklast är att skapa ett unikt filnamn med hjälp av en slumpgenerator, eller använd datum-klockckslag

/T

sin_adecMedlem sedan apr. 2002272 inlägg
#48

skulle du kunna förklara närmare...

OveRRidEMedlem sedan feb. 200112 078 inlägg
#49

Läs om exakt samma problem här: http://www.webforum.nu/showthread.php?s=&threadid=48011

crisse6Medlem sedan dec. 20002 526 inlägg
#50

om man använder datum/klockslag så kan det ju ändå bli samma om sidan är en populär sådan ;)

ToonsterMedlem sedan feb. 20001 590 inlägg
#51

Nej, inte om man har med sekunder.

/T

PellefantMedlem sedan maj 20023 372 inlägg
#52

Hej!

Det var ett toppenscript.

En fråga, på defaultsidan, står det bläddra på knappen, var kan man ändra det till "Browse" ? (Har letat igenom de tre filerna, men den verkar inte satt till "Bläddra" någonstans, eller är det någon grundinställning, så att de med engelska Windows ser "Browse" automatiskt?

Tacksam för hjälp.

P.s Att ge olika namn på filerna, så att de inte radera varandra om olika användare laddar upp, kommer jag att göra idag, förmodligen år-månad-datum-timme-minut-sekund-filnamn, tex 20021108135223filnamn.txt , eller något slumpat namn. Jag postar koden här sedan om någon är intresserad. :)

OveRRidEMedlem sedan feb. 200112 078 inlägg
#53

En fråga, på defaultsidan, står det bläddra på knappen, var kan man ändra det till "Browse" ? (Har letat igenom de tre filerna, men den verkar inte satt till "Bläddra" någonstans, eller är det någon grundinställning, så att de med engelska Windows ser "Browse" automatiskt?

Det är en grundinställning. Texten på knappen varierar beroende på vilket språk du har.

Skriver du <input type="file"> blir det automatiskt en ruta och en knapp, så den kan du inte påverka.

crisse6Medlem sedan dec. 20002 526 inlägg
#54

Du Override, har lite problem nu osa, konstigt nog. Filerna funkade utmarkt osa nar dom lag i en annan mapp (upload).. men det var bara for testkorning (vill inte blanda fardigt med icke fardigt), men nar jag flyttade och forsokte ladda upp sa far jag detta felmess:

Microsoft VBScript runtime error '800a0005' 

Invalid procedure call or argument: 'MidB' 

/forum/upload.asp, line 6

line 6 ar;

boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)

Varfor?

crisse6Medlem sedan dec. 20002 526 inlägg
#55

sa har ser min outputfile.asp fil ut (Response.Buffer = True ligger over):

<%
Randomize
Response.Expires=0
Response.Clear

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

BuildUploadRequest RequestBin

'Lite olika variabler

'Deklarerar variablen strMaxSize till 50000 bytes = 50 kb
strMaxSize = Request.TotalBytes

'strUsr är sessionsID:et
strUsr = "_"&session("sessionsID")

'strRandom skapar ett slumpat nummer
strRandom = CiNT(1-9000 * Rnd + 9000)

'strDt plockar ner datum
strDt = 	DatePart("m", Now())&"_"&_
		DatePart("d", Now())&"_"&_
		DatePart("yyyy", Now())

'strFile deklareras till formularfältet på default.asp
strFile = UploadRequest.Item("blob").Item("ContentType")

'I detta fall har vi bara .gif vi behöver oroa oss för och tar bara de 3 tecken från höger
strForm = Right(strFile,3)

'strAll kopplar ihop allting
strAll = strRandom&strDt&strUsr&"."&strForm

filename = Right(strAll,Len(strAll)-InstrRev(strAll,"\"))
value = UploadRequest.Item("blob").Item("Value")

'Skapar objekt
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

'Kollar om det är jpg eller gif fil om det stämmer, gå vidare
If strFile="image/pjpeg" OR strFile="image/gif" THEN

'Kollar nu med strMaxSize om den är större än 50kb, om inte, gå vidare
	If strMaxSize > 50000 then
		response.write "Bilden är för stor, "& strMaxSize &" bytes. Den får max vara 50000 bytes (50kb)."
	else

'Skapa och skriv fil
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Server.mappath(filename))

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

MyFile.Close

response.write "<b>Filens sökväg:</b> " & Server.mappath(filename) & "<br>"
response.write "<b>Filnamn:</b> " & filename & "<br><br>"
response.write "<img src=""" & filename & """>"

strSqlAddPic = "Update t_users set avatar = '"& filename &"' Where ID = "& session("sessionsID")
objConn.execute strSqlAddPic,,128

End IF
'Från If-satsen ovan så kommer här om det INTE är jpg eller gif fil
Else
response.write "Bilden måste vara av formatet .gif eller jpg."
End IF
%>
solbulleMedlem sedan mars 20015 287 inlägg
#56

Var inkluderar du upload.asp?

solbulleMedlem sedan mars 20015 287 inlägg
#57

Sen verkar lite kod ramlat bort...

<%
Response.Buffer = TRUE
Randomize
Response.Expires=0
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin
crisse6Medlem sedan dec. 20002 526 inlägg
#58

Japp, funkar nu... Men nu vill jag gora sa att om det finns en bild i faltet ("avatar") sa ska den nya uppladdningen ersatta den gamla bilden genom att anvanda samma namn som den befintliga bilden. Det funkar. Men nu om det ar tomt i db:n sa blir det nu "Permission Denied" pa den kod jag kor... sa har ser det ut...

[red]
If objRS.eof then
strAll = strRandom&strDt&strUsr&"."&strForm
filename = Right(strAll,Len(strAll)-InstrRev(strAll,"\"))
else
strAll = objRS("avatar")
filename = objRS("avatar")
End IF
[/red]
Jesper TMedlem sedan nov. 20017 144 inlägg
#59

Har du rätt sökväg till katalogen då?

solbulleMedlem sedan mars 20015 287 inlägg
#60

Å på vilken rad fårdu felmeddelandet, de du visar?

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)