Just nu i M3-nätverket
Jump to content

Javascript


Unadrien

Recommended Posts

Jag letar efter ett javascript som kan begränsa filstorlekar, eller storlekarna på bilder, när man laddar upp bilder. Vart ska jag leta? eller är det någon som har ett sånt script?

 

Link to comment
Share on other sites

-Patrik Johansson-

Du kan inte göra detta med javascript då javascript inte har rättighet att arbeta mot en användares lokala filsystem.

 

Alltså får du göra det serverside (eller med ex activeX med alla problem som följer med det).

 

//Patrik J

"Insanity: doing the same thing over and over again and expecting different results."
- citat av Albert Einstein

 

Link to comment
Share on other sites

vad förväntar du dig för svar?

Du säger att du letar efter ett script som begränsar filstorleken. Då får man känslan av att du redan har ett server side script som sköter själva uppladdningen, och det är i det scriptet du måste göra den här kollen. Alltså på serversidan, inte på klientsidan med javascript.

 

Så, har du något script som laddar upp bilden?

I sådant fall, vilket språk är det skrivet i?

Ev komponenter?

 

Har du inget bilduppladdningsscript än så kan du söka här på eforum så kommer du hitta massa tips.

 

Link to comment
Share on other sites

Anjuna Moon
Aha det var ju väldigt myckt till hjälp....

Vad använder du för serverkomponent när du laddar upp filer då?

 

Det går som sagt inte att göra i Javascript och det är helt i sin ordning. Det vore ett fruktansvärt säkerhetshål om det gick att manipulera filer via klientscript.

 

Link to comment
Share on other sites

Okej, jag är inte ån master på Webbdesign, och inte så insatt heller, men jag använder iallfall asp för att ladda upp filer. Jag har tagit scriptet, och redigerat det själv bara.

 

Link to comment
Share on other sites

Anjuna Moon
men jag använder iallfall asp för att ladda upp filer. Jag har tagit scriptet, och redigerat det själv bara.

 

Jo, men vilken komponent använder scriptet? Leta i koden efter en rad som liknar följande:

 

Server.CreateObject("NÅGOT.NÅGOT")

 

Istället för NÅGOT.NÅGOT, vad står det?

 

Link to comment
Share on other sites

'// Ladda upp fil

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

 

Så står det.

 

Link to comment
Share on other sites

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

 

Nja, det där är ett objekt för att skriva och läsa från filer. Det är inte uppladdningskomponenten. Hittar du ingen till rad? Om inte, posta hela uppladdningskoden här. (Är det mycket kod, markera den inklippta koden och tryck på LOG-knappen i inläggsfönstret)

 

Link to comment
Share on other sites

Det här ligger på en outputfile.asp

 

[log]<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

 

<!--#include file="../../login/functions.inc"-->

 

 

<html>

<head>

<title>Upload</title>

<meta http-equiv="refresh"content="300;URL=http://<%= Request.servervariables("HTTP_HOST")%><%= Request.servervariables("PATH_INFO")%>">

</head>

<body style="background-color:transparent">

 

<%

 

Response.Expires = 0

Response.Buffer = TRUE

Response.Clear

 

'// Bildnamnsgenerator

Passwordeller = ""

Randomize

For i = 1 to 10

intNum = Int(10 * Rnd + 48)

intBig = Int(26 * Rnd + 65)

intSmall = Int(26 * Rnd + 97)

intRand = Int(3 * Rnd + 1)

 

Select Case intRand

Case 1 : delPasseller = Chr(intNum)

Case 2 : delPasseller = Chr(intBig)

Case 3 : delPasseller = Chr(intSmall)

End Select

 

Passwordeller = Passwordeller & delPasseller

 

Next

 

 

'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))

'Response.BinaryWrite(Request.BinaryRead(varByteCount))

 

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)

 

Dim UploadRequest

Set UploadRequest = CreateObject("Scripting.Dictionary")

 

BuildUploadRequest RequestBin

 

'// Hämta formulärdata

 

bildnamn = UploadRequest.Item("bildnamn").Item("Value")

 

'// Hämta fildata

filepathname = trim(UploadRequest.Item("blob").Item("FileName"))

 

 

'// Kolla om något ska laddas upp

If Len(filepathname) > 0 Then

 

'// Ja, något ska laddas upp

SaveToDatabase = TRUE

contentType = UploadRequest.Item("blob").Item("ContentType")

filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))

value = UploadRequest.Item("blob").Item("Value")

strFinalFilename = cStr(Passwordeller & filename)

'// Kolla filstorlek

'If cInt(byteCount) <= 50000 Then

 

 

'// Ladda upp fil

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

pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14

Set MyFile = ScriptObject.CreateTextFile(Server.mappath("upload/"& strFinalFilename))

For i = 1 to LenB(value)

MyFile.Write chr(AscB(MidB(value,i,1)))

Next

MyFile.Close

 

response.Write ""&_

 

 

"<img src=""" & ("upload/"& strFinalFilename) & """>"& vbcrlf

 

 

'Else

'SaveToDatabase = FALSE

'Response.Write "Du har antingen en fil som inte har filändelse .jpg eller så är den större än 50 kb."

 

'End If

 

Else

'// Nej, inget ska laddas upp

SaveToDatabase = TRUE

strFinalFilename = ""

Response.Write ""&_

"<b>Filens sökväg:</b> <span style=""color:red"">Ingen fil har laddats upp..</span><br>"& vbcrlf &_

"<b>Filnamn:</b> <span style=""color:red"">Ingen fil har laddats upp..</span><br><br>"& vbcrlf

 

End If

 

Set UploadRequest = Nothing

 

 

'// Spara information om allt är ok

If SaveToDatabase = TRUE Then

 

Set Connection = Server.CreateObject("ADODB.Connection")

Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; "&_

"Data Source="&Server.MapPath("../fr.mdb")

 

SQLStmt = "INSERT INTO bild (bildnamn, filename) "

SQLStmt = SQLStmt & "VALUES('"& bildnamn &"', '"& strFinalFilename & "') "

Connection.Execute(SQLStmt),,128

Connection.Close : Set Connection = Nothing

Response.Write "Ok, allt klart.."

Response.Redirect("default.asp")

 

Else

Response.Write "Något blev fel på vägen.. ingen fil har laddats upp!"

 

End If

 

%>

 

<!--#include file="upload.asp"-->

 

 

 

 

</body>

</html>[/log]

 

Och det här ligger på upload.asp

 

[log]<%

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

%>[/log]

[inlägget ändrat 2005-06-21 14:54:49 av Unadrien]

Link to comment
Share on other sites

Anjuna Moon

Ah, ok då förstår jag, det där är ett sätt att ladda upp filer utan att använda sig av tredjeparts komponent. Jag måste iväg strax (tid för öl i solen =), men jag kan kolla på koden imorgon och försöka ge dig en lösning på problemet .

 

Link to comment
Share on other sites

Anjuna Moon

Ok, i den första filen ändra följande rad:

byteCount = Request.TotalBytes 

till

byteCount = Request.TotalBytes 
If byteCount>1000000 Then
 Response.Redirect "fileTooBig.asp"
End If

 

Då laddas inget upp om filen är större än 1MB och användaren skickas till filen fileTooBig.asp där du kan lägga in ett felmeddelande till användaren eller nåt.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...