webForumDet fria alternativet

Unikt bild namn

ASPur ASP

9 svar · 268 visningar · startad av Jacob

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

Jag har en sida där man kan skicka upp bilder, problemet är om någon försöker skicka upp en bild vars namn redan finns på serven. Då skriver nämligen min uploadkomponet över filen. det finns en funktion i uploadkompnonten som gör att man kan sätta ett eget namn på filen, så jag tänkte först att man kunde sätta filnamnet till det blivande databas id men eftersom jag inte kan veta id samtidigt som jag lägger till posten så blir det ju svårt.
Är det någon som har någon idé på hur man kan få ett unikt namn på bilden, en slum är ju inte bra det kan ju hända att den tar samma någon gång

------------------
ja©ob

Medlem sedan juli 20003 825 inlägg
#2

Vad är det du frågar *egentligen*? Om du sparar bilder med en komponent, hur kommer då databasen in i bilden!?

Rent spotant kan man ju tycka att det vore trevligt om användarna själva får välja man på sina bilder... Om dom då väljer samma namn så skrivs filen över... det känns ju snarare som en feature än en bugg!

Om det är en bild per snvändare kan man ta session.sessioID.

------------------
Get the redcarpet treatment.

Medlem sedan dec. 2000503 inlägg
#3

kommar aldrig session.sessioID vara samma, i så fall är det precis det jag vill ha.

------------------
ja©ob

Medlem sedan juli 20003 825 inlägg
#4

session.sessionID är relativt unikt. Kolla själv!

response.write session.sessionID

Nackdelen är ju uppenbar om en medlem eller användare ska ladda två bilder....

*kom precis på*

Det borde gå om du skriver session.abandon, då får användaren ett nytt sessionID. :-)

Nackdelen skulle i så fall vara att det blir j*vligt osexiga filnamn, typ 619029180.jpg

*Oups, inte så långt som jag trodde... sorry!*

' ## PASSWORD GENERATOR
Randomize ' Initialize random-number generator.
Do Until i = 8
myPW = myPW & chr((25 * Rnd) + 65)
i = i + 1
Loop

------------------
Get the redcarpet treatment.

Medlem sedan dec. 2000503 inlägg
#5

tackar Eclipse

------------------
ja©ob

Medlem sedan dec. 1999653 inlägg
#6

eller så kombinerar du session.sessionID med filnamnet.

filename = session.sessionID & "-" & filename

då kommer du få något i stil med 619029180-boll.jpg
det kanske är okej?

mvh.

------------------
void[]
stash/$gu&-public(querystring)/n int{}bind "2" "say i own!" :)

Medlem sedan dec. 2000503 inlägg
#7

Det är faktist bättre Narkos tack så mycket :)

------------------
ja©ob

Medlem sedan feb. 20001 590 inlägg
#8

Rent tekniskt spelar det ju ingen roll vad bilden har för namn?
Att använda Session.SessionId är inget vidare bra förslag, eftersom det inte är unikt i längden. Det är bara garanterat att alla aktiva sessioner har olika nummer, inget mer.

Det bästa är att använda ett unikt id från databasen.

Gör så här:

Skicka upp formuläret med bilden till ett script.

I detta script, spara formulärdatan i databasen.

Kör sedan en SQL sats som reurnerar det högsta id numret (det är den sista inlagda posten), använd detta idnummer som filnamn, ex:

filename="bild"&RS.id&".jpg"
om du har flera bilder så är det bara att skapa flera bildnamn, typ
filename_2="bild_2"&RS.id&".jpg"

öppna sedan databasen, spara detta bildnamn i ett fält efter det rätta id numret.

Visst, detta är lite omständigt, men det funkar.

/T

------------------
This is what the KLF is about

[Redigerat av Toonster den 03 jun 2001]

Medlem sedan dec. 2000503 inlägg
#9

Ok tack, jag gör nog så då

------------------
ja©ob

Medlem sedan feb. 200112 078 inlägg
#10

Jag har annars ett kanonbra script (utan komponent) som laddar upp bilder och där filen heter bildnamnet och om du vill det, även mer tecken, tex anvid..

Sen att lagra SessionId i en databas är väl inte sådär kanonbra va.. med tanke på att de inte garanteras vara unika som webbservern startas om.. eller?

Jag genererar alltid anvId till typ en 25 siffrig kombination och använder den istället.

Kod till upload-scriptet:

index.asp

<FORM METHOD="Post" ENCTYPE="multipart/form-data" ACTION="outputFile.asp">
Fil : <INPUT TYPE="file" NAME="blob"><BR>
<INPUT TYPE="submit" NAME="ok">
</FORM>

Outputfile.asp

<%
' Author Philippe Collignon
' Email PhCollignon@email.com

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

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

'Create FileSytemObject Component
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("test/"&filename))
response.write(Server.mappath(filename)) 

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

MyFile.Close
%>
<b>Uploaded file : </b><%=filename%><BR>
<img src="test/<%=filename%>">
<!--#include file="upload.asp"-->

upload.asp

<%
' Author Philippe Collignon
' Email PhCollignon@email.com
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
%>

hoppas det är till nån hjälp..

------------------
*Notepad.exe for president*

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