Just nu i M3-nätverket
Jump to content

Behöver hjälp med uploadscript


JonataNes1

Recommended Posts

Sitter och filar på ett upload script till min community. Det går ut på att medlemmarna ska kunna ladda upp en bild på sig själva. Deras användarnamn lagrar jag i en Session (username).

Problemet jag har stött på är dock att om man laddar upp en bild som heter fil.jpg så kan en annan användare också ladda upp en bild som heter fil.jpg och då skrivs den över.

Hur gör jag så att användarnas bilder sparas som deras användarnamn eller kan man lägga till ett Sessions.ID på varje uppladdad bild?

Tacksam för svar.

Link to comment
Share on other sites

Christoffer Eklund

Om du bu har har ett community, antar jag att du har en medlemsdatabas. Så spar bilderna däri så slipper du bry dig om filnamnet.

 

/doffe

 

 

 

 

Link to comment
Share on other sites

Magnus Ahlkvist

Vad har du för upload-komponent, eller använder du "pure asp"?

Lite info hjälper rätt mycket...

 

--

En röst talade till mig och sade:

"Le och var glad, ty det kunde vara värre".

Så jag log, och jag var glad.

Och det blev värre.

 

Link to comment
Share on other sites

Så här ser det ut:

 

<%

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")

 

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 contentType="image/pjpeg" THEN

 

elseIf byteCount<=250000 THEN

username= Session("username")

 

set fso = server.createobject("scripting.filesystemobject")

if fso.folderexists(server.mappath(session("username"))) = false then

fso.createfolder(server.mappath(session("username")))

Set MyFile = ScriptObject.CreateTextFile("c:\inetpub\wwwroot\tsp\bilder\pics\" & filename & Session.SessionID)

else

 

 

 

'Create FileSytemObject Component

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

 

'Create and Write to a File

username= Session("username")

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("/tsp/bilder/pics/" & filename & Session.SessionID))

 

 

For i = 1 to LenB(value)

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

Next

 

MyFile.Close

end if

end if

set fso = nothing

 

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 & """>"

%>

<%

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

 

 

username = Session("username")

 

 

Set connection = server.createObject("adodb.connection")

connection.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("/tsp/forum/members.mdb")&";pwd=kannibal"

SQL = "SELECT * FROM members"

set RS = Connection.Execute(SQL)

SQL = "UPDATE members Set bild = '" & filename & "' where username = '" & username & "'"

Connection.Execute(SQL)

response.redirect "/tsp/forum/medlem.asp?username="&session("username")

 

%>

 

Link to comment
Share on other sites

Som ni ser har jag försökt klämma in Session.SessionID på två ställen men det fungerar dick väldigt dåligt.

 

Link to comment
Share on other sites

  • 4 months later...

Hej

jag har en fråga om den här Loopen inte går att gör på något annat sätt ?

__________________________

For i = 1 to LenB(value)

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

Next

__________________________

för laddar jag upp en fil som är stor >1mb så tar det låååång tid att köra den delen.

 

mvh

johan

 

 

Link to comment
Share on other sites

Archived

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

×
×
  • Create New...