webForumDet fria alternativet

AspUpload igen...

11 svar · 432 visningar · startad av timedia

timediaMedlem sedan maj 2001420 inlägg
#1

Jag har försökt tidigare men kom inte långt :l
Börjar om igen med ett "lättare" script för att försöka förstå!
Jag har följande formulär som med ASP-upload ska skicka upp en fil till servern och lägga till ett textfält i DB.

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp"> 

Datum ex. 2002-03-16<br>
<input type="text" name="proto" size="20"><br><br>
<b>Välj fil:</b><br>
<INPUT TYPE=FILE SIZE= 60 NAME="FILE2"><br> 

<INPUT TYPE=SUBMIT VALUE="Upload">
</FORM>

UploadScript1.asp ser idag ut så här. Har försökt ändra den men DB vill inte ta emot textfältet.
Hur gör jag? Någon som kan hjälpa?

<% 

Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.SetMaxSize 500000, False 

Count = Upload.Save(Server.MapPath("proto_up"))
%>
Du har laddad upp<% = Count %> fil.
solbulleMedlem sedan mars 20015 287 inlägg
#2

Den där koden laddar ju endast upp en fil, den har ju inget med en databas att göra.
I manualen http://www.aspupload.com/manual.html (som din kod kommer från(?)) finns det flera exempel på hur du går tillväga.

Nyckeln är nog att använda sig av Upload.Form("DESCR") och inte request.Form("DESCR")

timediaMedlem sedan maj 2001420 inlägg
#3

OK Solbulle.
Ska försöka lite till och återkommer om jag lyckas :l

timediaMedlem sedan maj 2001420 inlägg
#4

Nu har jag labbad mer men det vill sig inte :(
Här är felmeddelandet jag får:

ADODB.Recordset error '800a0cc1' 
Item cannot be found in the collection corresponding to the requested name or ordinal. 
/admin/Upload.asp, line 24

Line 24 är rs("filnamn") = File.Filename
Formuläret jag använder har bara två fält:

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="Upload.asp"> 

Datum ex. 2002-03-16<br>
<input type="text" name="proto" size="20"><br><br>

<INPUT TYPE=FILE SIZE= 60 NAME="THEFILE"><br> 

<INPUT TYPE=SUBMIT VALUE="Upload">
</FORM>

upload.asp ser ut såhär: (access 2000 db med tabellen aktuellt, Id=räknare, proto=text, filnamn=text)

<HTML>
<BODY>
<%
Set Upload = Server.CreateObject("Persits.Upload")
' Capture files
Upload.Save(Server.MapPath("/admin/proto_up"))
' Obtain file object
Set File = Upload.Files("THEFILE")

If Not File Is Nothing Then
  ' Build ODBC connection string
  Connect = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../../sys/komforb.mdb")
  
   ' Use ADO Recordset object
   Set rs = Server.CreateObject("adodb.recordset")

     ' Reopen recordset to insert file
   rs.Open "aktuellt", Connect, 2, 3

   rs.AddNew
   
   rs("filnamn") = File.Filename
   rs("proto") = Upload.Form("proto")
   rs.Update

   Response.Write "File saved."
Else
   Response.Write "File not selected."
End If
%></BODY>
</HTML>

Är det ingen som kan hjälpa? Jag lovar att jag har försökt mycket nu :)

erkaMedlem sedan dec. 19996 522 inlägg
#5

Många webhotell stänger av alla möjligheter att ladda upp med aspupload utom save.virtual, det är inte det som strular då ? Eller att webhotellet har tex v.2.1 och inte 3.0 som manualen på https://www.aspupload.com är för

solbulleMedlem sedan mars 20015 287 inlägg
#6

Det där verkar väldigt rätt, är du HELT säker på att namnen i databasen är rätt samt sökvägarna?

Får du upp filen om du skippar databasinlägget?

timediaMedlem sedan maj 2001420 inlägg
#7

Brukar inte ge upp, men nu är det nära :(
Webhotellet är Digikom så jag tror inte felet ligger där. Dom använder en äldre version av ASPUpload, men det borde ju fungera ändå? ((Namnen i DB är rätt och alla sökväger stämmer också)

Är det verkligen ingen som har laddad upp en fil till servern och samtidigt sparat filnamnet i DB? Om DU har gjord det, kan du inte visa mig hur du gjorde?

CatZMedlem sedan jan. 20022 440 inlägg
#8

Lösning ?

solbulleMedlem sedan mars 20015 287 inlägg
#9

Jag har prövast din kod rakt av, bara ändrat sökväg till databasen å det fungerar för mig.
Har du testat att sätta dina rs till fasta värden för att så at säga ringa in felet?

tex
rs("filnamn") = "timedia"

Så brukar jag göra för att kunna utesluta del efter del.

erkaMedlem sedan dec. 19996 522 inlägg
#10

Denna fungerar men är inte optimerad ännu, har inte haft tid att fixa det. Den använder sig av Save Virtual som på de flesta webhotell är det enda som tillåts när man använder ASPUpload, den här är gjort för version 2.1 av AspUpload men fungerar även på 3.0. Självklart får du modifiera den men du ser hur man kan göra, prova med save virtual !

Dim Cn, StrComment, strGalleryName, Rs, IntMappId, i, strFilNamn, strFilDesc,strErrorMess, strSQL,strFileEnd,Cnt,CntFiles
Set Cn = Server.CreateObject("ADODB.Connection") 
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("*********")
strComment = Session("strKommentar")
strComment = replace(strComment,"'","''")
strGalleryName = Session("strGalleryName")
strGalleryName = replace(strGalleryName,"'","''")

strSQL ="INSERT INTO AlbGallerys (Fk_UserId,GalleryName,GalleryDesc,GalleryDate) "_
				&"VALUES ("& Session("UserId") &",'"& strGalleryName &"','"& strComment &"',#"& Date &"#)"
Cn.Execute(strSQL)
Session.contents.Remove("strGalleryName")
Session.contents.Remove("strKommentar")
Rs = "SELECT @@identity"
Set Rs = Cn.Execute(RS)
IntMappId = Rs.Fields(0).value
Rs.Close
Set Rs = Nothing

strPath = Server.Mappath("/Foton/FotoAlbum/Album/" & IntMappId)
Set FSO = Server.CreateObject("Scripting.FileSystemObject")

'**************************************************************************
'-----KOLLA OM MAPPEN FINNS, OM DEN GÖR DET AVBRYT UPPLADDNINGEN-----------	
'**************************************************************************
If FSO.FolderExists(strPath) Then
	Response.Write"<b>Något gick fel</b><br>Något gick fel i uppläggningen av nytt album. Det kan bero på många saker såsom att du inte fyllt i beskrivning på bilderna eller helt enkelt att det är för många användare som just nu försöker lägga upp nya album. Var vänlig och prova igen om några minuter.<br><br>"

'**************************************************************************
'-----OM DEN INTE FANNS, LADDA UPP BILDERNA Å LÄGG TILL INFON I DB---------	
'**************************************************************************
Else

	Response.Write"<b>Album uppladdat</b><br><br><a href=""VisaAlbum.asp?IntAlbumId="& IntMappId &""" class=""Rightmeny"">&raquo;&nbsp;Kolla på albumet</a><br><br>"
	Set Upload = Server.CreateObject("Persits.Upload.1")
	Set Mapp = FSO.CreateFolder(strPath)

	On Error Resume Next
	Upload.SaveVirtual("/Foton/FotoAlbum/Album/"& IntMappId)
	Upload.SetMaxSize 5000, True 

	For Each File in Upload.Files
		strFilPath = File.Path
		arrPath = split(strFilPath, "\")
		strFil = arrPath(ubound(arrPath))
		Cnt = Cnt + 1
		strFileDesc = Upload.Form("DESCR"& Cnt &"")
		strFileDesc = Replace(strFileDesc,"'","''")
		
		strSQL = "INSERT INTO AlbPictures (Fk_GalleryId,PicImage,PicSize,PicComment) "_
					&"VALUES ("& IntMappId &", '"& strFil &"', '"& File.Size &"', '"& strFileDesc &"')"
		Cn.Execute(strSQL)
		If Err.Number = 8 Then
				strErrorMess = "<br><br><b>Obs!</b><br>En del av dina filer blev inte uppladdade pågrund av att bilden var större än tillåten storlek (<b>70Kb</b> / bild)"
		End If
	Next	
	
	strSQL = "UPDATE [User] Set PointPhoto = PointPhoto + "& Cnt &" WHERE Pk_UserId = "& Session("UserId") &""
	Cn.Execute(strSQL)
	

	
	   
'**************************************************************************
'TA BORT KATALOGEN/INFON FRÅN DB OM DET INTE BLEV NÅGON FIL UPPLADDAD
'**************************************************************************
	Set FSO = Server.CreateObject("Scripting.FileSystemObject")
	Set Folder = FSO.GetFolder(strPath)
	set Files = Folder.Files
	CntFiles = "0"
	For Each Item In Files
		CntFiles = CntFiles + 1
	Next
	If CntFiles = "0" Then
		Folder.Delete
		Set FSO = Nothing
		Set Files = Nothing
		Set Folder = Nothing
		strSQL = "DELETE FROM AlbPictures WHERE Fk_GalleryId = "& IntMappId &""
		Response.write strSQL
		Cn.Execute(strSQL)
		strSQL = "DELETE FROM AlbGallerys WHERE Pk_GalleryId = "& IntMappId &""
		Response.write strSQL
		Cn.Execute(strSQL)
		Cn.Close
		Set Cn = Nothing
		Response.Redirect("SkapaAlbum.asp")
	End If
	Set FSO = Nothing
	Set Files = Nothing
	Set Folder = Nothing
	If strErrorMess <> "" Then Response.Write strErrorMess
End If
timediaMedlem sedan maj 2001420 inlägg
#11

HURRA! :birp
Ser att du har laddat upp ett script Erka. Tackar, men jag fixade det precis (rättigheterna lurade mig :r ) Tack2 till Solbulle!!
Bifogar det som funkade till slut:

<%
Set Upload = Server.CreateObject("Persits.Upload")
' Capture files
Upload.SaveVirtual("proto_up")

' Obtain file object
Set File = Upload.Files("THEFILE")

If Not File Is Nothing Then
  ' Build ODBC connection string
  Connect = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../../sys/komforb.mdb")
  
   ' Use ADO Recordset object
   Set rs = Server.CreateObject("adodb.recordset")

     ' Reopen recordset to insert file
   rs.Open "aktuellt", Connect, 2, 3

   rs.AddNew
   
   rs("bild") = File.ExtractFileName
   rs("rubrik") = Upload.Form("rubrik")
   rs.Update

   Response.Write "File saved."
Else
   Response.Write "File not selected."
End If
%>
solbulleMedlem sedan mars 20015 287 inlägg
#12

Kul att det löste sig. :)

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