Jag är på jakt efter ett script att ladda upp bilder och lägga till info i en databas och sedan ändra bildens namn man laddade upp till idt bilden fick i databasen(detta gäller även en thumbnail man laddar upp samtidigt), kan man inkludera dom funktionerna i det här scriptet? :)
Uploadscript utan komponent
307 svar · 16 553 visningar · startad av OveRRidE · sida 4 av 16
Ja det går, ganska nära det som crisse6 håller på med.
Har det inte redan avhandlats i denna tråd så finnsdet i andra, men kör på så hjälper vi. :)
Ok, nu har jag ju inte börjat med kodandet men jag kan ju förklara hur allt är uppbyggt. :)
Databasen heter latmask.mdb, i den har jag en tabell som heter pictures som ser ut så här:
PIC(PictureID,autonumber, primary key) | name(namn) | date_tooked(datum som bilden togs, date/time) | date_upload(datum som bilden laddades upp, date/time) | cat(vilken kategori som bilden hör till, text)
Jag vill alltså att när man sparar bilden på servern och har lagt till nödvändig info ändra namn på bilden(samt dess thumbnail som man laddar upp samtidigt) till det idt som den fick i databasen, samma gäller thumbnailen fast den ska heta thumb_id.
Bilderna är i jpg-format.
Hoppas jag har gett lite klarhet. :)
Imorn ska jag sätta mig och koda så då skickar jag upp lite koder. :)
Annars är det väl en ide att ge bilderna ett slumpat namn som Crisse gör? Samt lagra det namnet i db:n, eller "måste" du ha samma som id? (Som iofs kanske inte är direkt svårare att göra.)
Jag vill ha samma som idt, det blir lättare så om jag ska flytta eller ha tag på en viss bild och så tycker jag. :)
Okelidoki.
Om du lägger in alla data från ditt formulär plockar du ut id-nummret och döper sen om filen du laddade upp.
typ:
strSQL="INSERT INTO pictures (name,date_tooked) VALUES('namn','datum')"
objConn.Execute strSQL,,128
set objRS = objConn.execute("SELECT @@IDENTITY")
intID=objRS(0)
PS. Kanske inte helt rätt beroende på datatyper, men hur som, i intID ska du ha id som du döper bilden till.
Ok, men hur ser själva koden som man döper om bilden med?
Jag har inte så stor koll på FSO och sånt nämligen....
Här hittar du bra info: http://www.devguru.com/Technologies/vbscript/quickref/filesystemobject.html
Annars finns det massor av trådar om det.
http://www.webforum.nu/search.php?s=&action=showresults&searchid=164514&sortby=lastpost&sortorder=descending
ah, blev lite fran mitt amne dar sa jag postar hela koden... Far alltsa Permission Denied pa detta, den raden ar 74:
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("usrPics/"&filename))
hela koden:
<%
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
'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
strSqlCheckPic = "Select * from t_users Where ID = "& session("sessionsID")
set objRS = objConn.Execute(strSqlCheckPic)
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
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("usrPics/"&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("usrPics/"&filename) & "<br>"
response.write "<b>Filnamn:</b> " & filename & "<br><br>"
response.write "<img src=""usrPics/" & 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
%>
Kolla rättigheterna, precis som felmeddelandet anger.
men det funkade ju innan jag satte den if satsen, det sker alltsa bara om det ar tomt i db:n!
Nu behöver jag hjälp att få till så att thumbnailen laddas upp och att bilderna hamnar i rätt mapp samt att få till databasen. :)
Bilden i naturlig storlek(bigpic) ska hamna i mappen gallery som ligger under mappen jag laddar upp i(m.a.o ../gallery) och thumbnailen(thumbnail) ska hamna i gallery/thumbnails(../gallery/thumbnails).
Sen så hittade jag en kod i i en annan tråd som gör att man kan ändra namn på filen, jag vill ändra namnen på bilderna till det id dom får i databasen(thumbnailen ska heta thumb_id).
Dim pathToFile
Dim fso,fnum
Set fso=Server.CreateObject("Scripting.FileSystemObject")
fnum=1
Do While fso.FileExists(Server.mapPath("uploaded/") & "\" & fnum & "-" & fileName)
fnum=fnum+1
Loop
pathToFile=Server.mapPath("uploaded/") & "\" & fnum & "-" & fileName
fileName=fnum & "-" & fileName
Set fso=Nothing
Jag tror nog att det var allt jag ville! :e
Så kära medlemmar, bara att klippa och klistra för jag kan inte mycket om FSO så här behövs det hjälp. ;)
ElseIf Request("page") = "addpic" Then
'######################################## FORMULÄR FÖR ATT LADDA UPP BILDER
Response.Write("<form method=""post"" action=""admin_pictures.latmask?page=picupload"" enctype=""multipart/form-data"">")
Response.Write("640x480px-bild: <input type=""file"" name=""bigpic""><br>")
Response.Write("Thumbnail(90x68px): <input type=""file"" name=""thumbnail""><br>")
Response.Write("Namn: <input type=""text"" name=""name""><br>")
Response.Write("Datum då bilden togs: <input type=""text"" name=""date_tooked""><br>")
Response.Write("<input type=""submit"" value="" Ladda upp! "">")
Response.Write("</form>")
ElseIf Request("page") = "picupload" Then
'######################################## LADDA UPP BILDERNA
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("bigpic").Item("ContentType")
filepathname = UploadRequest.Item("bigpic").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("bigpic").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(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 & """>"
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
End If
Tack för förhand! :) :bire
Inte byter den koden namn på några filer inte.
Inte? :o
Det var vad det stog iallafall! :o
vill bara tipsa om en sajt for olika contenttype om du inte vet dom...
http://www.reliableanswers.com/ContentType/CType.asp?ord=subs
det ar bara att mata in i faltet "Class" exempel, .zip sa far du fram det som ar for zip ;)
Halloj..
tänkte så småning om börja andvända ditt script..
men tänkte först försäkra mej om att det fungerar har lite frågor:
* är det ASP 3.0?
* fungerar det bara under IIS? eller fungerar det även under Apache+chilisoft
Cannabis_Tomten skrev:
Halloj..
tänkte så småning om börja andvända ditt script..
men tänkte först försäkra mej om att det fungerar har lite frågor:* är det ASP 3.0?
* fungerar det bara under IIS? eller fungerar det även under Apache+chilisoft
det e lungan, jag testade scriptet och det fungerar outstanding!!
men jag tänkte kolla hur jag ska lägga in en check! vill endast tillåta upplandning av!
*.xls
*.mdb
*.doc
*.jpg
har suttit å läst på crisses grejor, men får inte ihop det riktigt.. nån som vet vad man skall sätta in var.. så blir jag jätte glad!!
Du gor ju en enkel If sats som kollar typ....
If contentType = "application/xxxxx" then
'ga vidare
Else
response.write "Inte ratt filtyp"
End IF
crisse6 skrev:
Du gor ju en enkel If sats som kollar typ....
If contentType = "application/xxxxx" then 'ga vidare Else response.write "Inte ratt filtyp" End IF
okej =)
ett litet frågetecken!!
If contentType = "application/xxxxx" then
hur ska ma ändra den grunkan till dem olika filerna?