webForumDet fria alternativet

Uploadscript utan komponent

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

k0ffeMedlem sedan maj 2003352 inlägg
#221

Annars om du kör varianten med en loop så kanske du kan lägga filnamnet i olika variabelnamn för varje varv loopen gör... Lite luddigt kanske..

Om jag ska köra på den varianten istället, har du något förslag?
Vore bra om man kunde döpa om filen efter varje loop den gör, nu blir ju alla samma namn, dvd, filename.

HJÄLP!

k0ffeMedlem sedan maj 2003352 inlägg
#222

NÅGON? SNÄLLA!
Skulle verkligen uppskatta lite hjälp här, måste lösa det på något sätt ganska fort...

solbulleMedlem sedan mars 20015 287 inlägg
#223

Nu gör vi ett försök igen.
Du får alltså upp alla bilder samt övriga fält, men lyckas inte få in namnen i en tabell så att du kan knyta dom till rätt artikel?

k0ffeMedlem sedan maj 2003352 inlägg
#224

Jo, bildernas namn sparas i en tabell som heter visa_bild.
Och artikelns rubrik och datum m.m. sparas i en tabell som heter bildarkiv. Men när jag listar rubrikerna som länkar till respektive artikelar så kommer inte bilderna som hör till just den rubriken fram, utan allihop eftersom dom ligger utanför tabellen bildarkiv.
Är du med?

k0ffeMedlem sedan maj 2003352 inlägg
#225

Har du inget förslag på t.ex. det du föreslog, hur man ska göra för att sätta namn på bilderna med hjälp av en variabel. T.ex bild1, nästa varv loopen gör, bild2, o.s.v...

Det här är ju koden iaf:

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

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

for each fobj in UploadRequest
if UploadRequest.Item(fobj).Item("FileName")<>"" then
contentType = UploadRequest.Item(fobj).Item("ContentType")
filepathname = UploadRequest.Item(fobj).Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item(fobj).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("upload/"&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="upload/\<%=filename%\>"\>
	
	
	\<%
end if

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

solbulleMedlem sedan mars 20015 287 inlägg
#226

Njao, jag har ju inte riktigt det. :(
Men när du gör så där, kan du inte då smacka in bild för bild i db för varje loop som görs?

Eller iofs, lägg dom i en array kanske.

solbulleMedlem sedan mars 20015 287 inlägg
#227

Sista biten kod, modifierad:

MyFile.Close

	filstr = filstr & filename & ","

end if 
next

filArr = split(filstr,",")

For i = 0 to ubound(filArr)-1
	response.write i & ": " & filArr(i) & "<br>"
	response.write "<img src=""upload/" & filArr(i) & """>" 
Next

%> 
<!--#include file="upload.asp"-->
k0ffeMedlem sedan maj 2003352 inlägg
#228

Jo, jag lade in bild för bild i db:n, men då får ju varje bild ett separat ID, och då blir det bara EN bild som hör till rubrik och resten som har samma ID. Förstår du? Tanken är ju att få med ALLA bilderna i samma ID, därför måste man ha specifika namn på alla istället för bara "filename".

Ok, tack för koden.
Men samma sak här, hur "får jag tag" i bilderna in i db:n nu?

T.ex:

SQLStmt = "INSERT INTO bildarkiv (bild1, bild2, bild3) "
SQLStmt = SQLStmt & "VALUES('" & bild1 & "', '" & bild2 & ")

Hänger du med?

solbulleMedlem sedan mars 20015 287 inlägg
#229
MyFile.Close

	filstr = filstr & filename & ","

end if 
next

filArr = split(filstr,",")

For i = 0 to ubound(filArr)-1
	response.write i & ": " & filArr(i) & "<br>"
	response.write "<img src=""upload/" & filArr(i) & """>"

	SQLStmt = SQLStmt & "bild" & i & ","
	SQLStmt2 = SQLStmt2 & filArr(i) & "','"
Next

SQLStmt = "INSERT INTO bildarkiv (" & SQLStmt & "rubrik ,resterande_falt2)"
SQLStmt  = SQLStmt & "VALUES('" & SQLStmt2 & rubrik & "','" & variabel_falt2 & "')"

response.write SQLStmt  
%> 
<!--#include file="upload.asp"-->
k0ffeMedlem sedan maj 2003352 inlägg
#230

Aha, nu fick jag det att funka.

Stort tack!

solbulleMedlem sedan mars 20015 287 inlägg
#231

Puh, äntligen säg. ;) :)

Andy_MMedlem sedan nov. 20035 inlägg
#232

Filnamnet

Om jag skickar med ett unikt username ifrån upload formuläret hur gör jag då så att varje bild som laddas upp får filnamnet username.gif el. username.jpg ?

Allt fungerar i mitt script nu men pga att jag inte vill ha en massa onödiga gamla bilder liggandes på severn så skall användarna i min db bara kunna ha en bild per/anv så det gör inget om det redan finns en fil med namnet nisse.gif

Det är alltså helt ok om filen skrivs över.

Hur gör jag lättast för att bestämma filnamnet.

Som det är nu skickar jag med username men vet inte hur jag skall koda för att få filen att döpas till username.jpg istället för det namn filen har innan den laddas upp. :q

Tacksamm för hjälp // Andy

Jesper TMedlem sedan nov. 20017 144 inlägg
#233

Välkommen till WF!
Borde gå med movefile:

strFileName="filnamn.gif"
strnewFileName="Anders"
fso.movefile strnewFileName & right(strFileName,4)
Andy_MMedlem sedan nov. 20035 inlägg
#234

så här ser min kod ut ... vart stoppar jag in din kod för att få döpt filen direkt när folk laddar upp den?

Eller måste filen först upp på servern och sedan måste man slussa användaren till ytterligare en sida för att köra din kod?

<%
' Author Philippe Collignon

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

username = UploadRequest.Item("username").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")

'Kollar om det är jpg eller gif fil om det stämmer, gå vidare
if contentType="image/pjpeg" or contentType="image/gif" then

     'Kollar nu med strMaxSize om den är större än 150kb, om inte, gå vidare
	if byteCount \> 150000 then
		response.write "\<br\>\<br\>\<p align=center\>\<font face=Verdana size=2 color=red\>\<b\>Bilden är för stor, "& byteCount &" bytes.\<br\>Den får max vara 150000 bytes (150 Kb).\</b\>\</font\>\</p\>"
	else

'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)&"faces\bild"&filename)

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

MyFile.Close

......här fortsätter sidan och avslutas med ett formulär som uppdaterar användarens bildId i databasen

solbulleMedlem sedan mars 20015 287 inlägg
#235

Tror att det är så att i denna rad är det variabeln filename som ger filen sitt namn, mao ge variablen filename tidigare det namn du vill så är det klart.

Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&"faces\bild"&filename)

Hoppas jag... ;)

Andy_MMedlem sedan nov. 20035 inlägg
#236

Jag lyckades nu att få bilden döpt till användarens Username , men då fick jag inte med filändelsen dvs. .jpg eller .gif

Så nu fungerar det , men jag har garanterat inte fått in username på rätt ställe.

Någon som har tips och kan tala om på vilken rad och kod jag skall skriva för att även få med filändelsen.

Tackar på förhand alla hjälpsamma människor på detta forumet // Andy

solbulleMedlem sedan mars 20015 287 inlägg
#237

Om du tar o lägger till denna rad efter den rad där du sätter filename

filename = username & right(filename,4)
Andy_MMedlem sedan nov. 20035 inlägg
#238

Löste det själv uh huh ! =)

Någon som vet om min lösning är bra rent tekniskt sett ?
Kanske går att lösa på ett smidigare sätt ??
Nu har jag fått det som jag ville ha det att fungera ialla fall.

Bättre förslag mottages gärna ...

Så här blev min kod ifall någon annan funderar på att göra samma sak.

BuildUploadRequest RequestBin

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

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

' Plockar ut de fyra sista tecknen (från höger) i filnamnet dvs. .jpg el .gif
extension = Right(filename,4)

' Bygger ihop det nya filnamnet
Nytt = username & extension

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

solbulleMedlem sedan mars 20015 287 inlägg
#239

Ser vissa likheter... :OO

Andy_MMedlem sedan nov. 20035 inlägg
#240

Såg hur Åsa Gruvsjö hade gjort i sitt bildarkiv script.
Och fipplade fram och tillbaka med olika lösningar innan jag med min gurkhjärna lyckades få ihop nått som nu iaf fungerar.

En än gång tack för ett bra forum med hjälpsamma människor... (ni vet vilka ni är)

Mvh // Andy

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