Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 19:15 Der er 14 kommentarer og
1 løsning

Chili!Upload med ASP - Fejl: (Object required: 'upload')

Object required: 'upload'
Er hvad jeg får oplyst når det er at jeg prøver at uploade et billede til min server. Serveren understøttere de forskellige Chili!-komponenter inklusiv Chili!Upload. Jeg er MEGET MEGET ny i faget omkring uploading af filer da jeg først lige har skaffet mig adgang til en server...

Koden, til hvis man er interesseret:


<%
    if Request.ServerVariables("REQUEST_METHOD") = "POST" then

Set fbase = Server.CreateObject("Chili.Upload.1")
fbase.SizeLimit = 1000000

        Typ = fbase.SourceFileExtension
        Cat = upload.form("img_cat")
        Nam = upload.form("Name")
                  SQL = "INSERT INTO images (img_cat, name, img_type) VALUES ('" & Cat & "', '" & Nam & "', '"& Typ &"')"
                set rs = my_conn.execute(SQL)

filnavn = fbase.SourceFileName
t = inStrRev(filnavn,"\")
if t > 0 then  filnavn = Mid(filnavn,t+1)
fbase.SaveToFile(Server.mapPath(""& Cat &"/"& rs("id") &"" & filnavn))
Set fbase = Nothing


    '  Trap errors
    If Err Then
    UploadError = 1
    End If


    end if


                  SQL = "SELECT * from images_cat"
                set rs = my_conn.execute(SQL) %>



<h1>CMS * Mediearkivet</h1>

<div class="main-content">
       
<table border="0" cellspacing="4" cellpadding="0" style="width: 540px;">
    <tr>
        <td class="main-td-hl">Menu</td>
        <td class="main-td-hl">Upload billede</td>
    </tr>
    <tr>
        <td style="vertical-align: top;"></td>
        <td style="width: 100%; vertical-align: top;">
<% if UploadError = 1 then %>
<font color="red">Der er sket en fejl med uploadingen!<BR>
Fejltype: <%=Err.description%><BR>
Fil: <%=File.ExtractFileName%></font>
<% end if %>
        <form method="post" ENCTYPE="multipart/form-data">
            <table border="0" cellspacing="2" cellpadding="0">
                <tr>
                    <td style="padding-right: 5px; width: 100%;">Navn p&aring; billede:</td>
                    <td><input type="text" name="Name" style="width: 150px;"></td>
                </tr>
                <tr>
                    <td style="padding-right: 5px;">V&aelig;lg kategori:<br><br></td>
                    <td>
                        <select name="img_cat" style="width: 100%;">
                        <% do until rs.eof %>
                            <option value="<%=rs("id")%>"><%=rs("name")%> <%if rs("img_width") <> 0 then%> (<%=rs("img_width")%> x <%=rs("img_height")%>px)<%end if%></option>
                        <% rs.movenext %>
                        <% loop %>
                        </select><br><br>
                    </td>
                </tr>
                <tr>
                    <td style="padding-right: 5px; width: 100%;">Sti:</td>
                    <td><input type="file" name="FILE1" style="width: 250px;"></td>
                </tr>
            </table><br><br>
       
            <input type="image" src="img/submit_buttons/save.gif" onclick="submit()" class="submit" alt="Gem">
        </form>
       
        </td>
    </tr>
</table>   
</div>
Avatar billede eagleeye Praktikant
17. august 2004 - 19:32 #1
Prøv at rette disse to linjer:
        Cat = upload.form("img_cat")
        Nam = upload.form("Name")

Til:

        Cat = fbase.FormData("img_cat")
        Nam = fbase.FormData("Name")
Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 19:41 #2
ADO Could not find the object in the collection corresponding to the name or ordinal reference requested by the collection.
/cms_media_upload_img.asp, line 15
NB: Det er et billede jeg prøver at uploade hvis det er DET der er problemet...?!


<%
    if Request.ServerVariables("REQUEST_METHOD") = "POST" then

Set fbase = Server.CreateObject("Chili.Upload.1")
fbase.SizeLimit = 1000000

        Typ = fbase.SourceFileExtension
        Cat = fbase.formData("img_cat")
        Nam = fbase.formData("Name")
                  SQL = "INSERT INTO images (img_cat, name, img_type) VALUES ('" & Cat & "', '" & Nam & "', '"& Typ &"')"
                set rs = my_conn.execute(SQL)

filnavn = fbase.SourceFileName <-------------- Linie 15 -----------
fbase.SaveToFile(Server.mapPath(""& Cat &"/"& rs("id") &"" & filnavn))
Set fbase = Nothing


response.write "filen er nu gemt og hedder " & filnavn

    '  Trap errors
    If Err Then
    UploadError = 1
    End If


    end if


                  SQL = "SELECT * from images_cat"
                set rs = my_conn.execute(SQL) %>
Avatar billede eagleeye Praktikant
17. august 2004 - 19:44 #3
Jeg tror linje 15 er:
fbase.SaveToFile(Server.mapPath(""& Cat &"/"& rs("id") &"" & filnavn))

For man får ikke ID på den måde. Alt efter hvilken database det er kan man hente ID på forskellige måder. Så hvilken database bruger du?
Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 19:46 #4
MySQL...
Hmm Min pointe med scriptet er at uploade et billede som så skal renames til den ID som den så får i Databasen...
Avatar billede eagleeye Praktikant
17. august 2004 - 19:49 #5
Ja det kan jeg se :)
Ok men mySQL henter man ID sådan her lige efter man har indsat:



<%
    if Request.ServerVariables("REQUEST_METHOD") = "POST" then

Set fbase = Server.CreateObject("Chili.Upload.1")
fbase.SizeLimit = 1000000

        Typ = fbase.SourceFileExtension
        Cat = fbase.formData("img_cat")
        Nam = fbase.formData("Name")
                  SQL = "INSERT INTO images (img_cat, name, img_type) VALUES ('" & Cat & "', '" & Nam & "', '"& Typ &"')"
                my_conn.execute(SQL)

              'Henter ID på sidste tilføjet post
              SQL = "SELECT last_insert_id FROM images"
              Set rs = my_conn.Execute(SQL)
              nytID = rs(0)


filnavn = fbase.SourceFileName
fbase.SaveToFile(Server.mapPath(""& Cat &"/"& nytID &"" & filnavn))
Set fbase = Nothing


response.write "filen er nu gemt og hedder " & filnavn

    '  Trap errors
    If Err Then
    UploadError = 1
    End If


    end if


                  SQL = "SELECT * from images_cat"
                set rs = my_conn.execute(SQL) %>
Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 19:56 #6
Error Type:
ADODB.Recordset.1 (0x80004005)
SQLState: 42S22 Native Error Code: 1054 [TCX][MyODBC]Unknown column 'last_insert_id' in 'field list'
/cms_media_upload_img.asp, line 17
Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 20:14 #7
Hmm regnede ellers med at du kunne finde ud af den?
Tror nemlig at det er forkert med last_insert_id ?!

// Respons?
Avatar billede eagleeye Praktikant
17. august 2004 - 20:50 #8
Ja det virker åbenbart ikke, måske det er i nyere versioner af mysql.

Prøv at rette:
SQL = "SELECT last_insert_id FROM images"

Til:

SQL = "SELECT max(id) FROM images"
Avatar billede dr-webdesign.tk Nybegynder
17. august 2004 - 21:15 #9
Hmm hvad gør jeg så hvis der er to der uploader på samme tid?
Så vil den måske give den samme ID til begge deres upload-fil?
Avatar billede eagleeye Praktikant
17. august 2004 - 21:19 #10
Meningen med last_insert_id var at den skulle være sikker, så længe man ikke lukkede connection. Jeg tror ikke der er garanti for max(id) vil give det rigtige Id hvis to indsætter på samme tid.

Måske der skal () efter, prøv lige:

SQL = "SELECT last_insert_id() FROM images"
Avatar billede dr-webdesign.tk Nybegynder
18. august 2004 - 22:04 #11
Der er lige et problem mere, du skal nok få dine point men vil være sikker på du vil hjælpe;
Kan det lade sig gøre at lave en funktion der automatisk opretter en mappe hvis en af undermapperne i server.mapPath'en ikke findes?
DVS:
Fil til /img/Dennis/1.jpg
Men på serveren findes mappen Dennis ikke, så derfor skal den automatisk lave den mappe!!!

Kan man det?
Avatar billede eagleeye Praktikant
18. august 2004 - 22:24 #12
Ja det man. Man kan med FSO bruge CreateFolder dog kun en sub folder ad gangen så havis man vil oprette /img/Dennis/folder/1.jpg skal det kodes lidt. Jeg har dette som kan oprette foldere også med flere under hinanden:


nyefolder = "/img/Dennis"
Set fso = CreateObject("Scripting.FileSystemObject")
if right(nyefolder,1)="/" then nyefolder = left(nyefolder,len(nyefolder)-1)
nyfolderArr = Split(nyefolder, "/")
for i = 0 to ubound(nyfolderArr)
  sti = sti & nyfolderArr(i) & "/"
  if sti <> "/" then
    if fso.FolderExists(Server.Mappath(sti)) = false then
      Set rootFolder = fso.CreateFolder(Server.Mappath(sti)) 
    end if
  end if
next
Avatar billede dr-webdesign.tk Nybegynder
18. august 2004 - 23:00 #13
Hmm den bliver jeg lidt forvirret over når jeg prøver på at tyde den.... Altså;

Det hele foregår i et CMS-system. Derinde har man nogle Kategorier hvilket billederne bliver opdelt efter. Men det skal kunne være muligt at oprette nye kategorier og dermed skal den tjekke om "mappestien" findes, for gør den ikke det så skal der oprettes mapper som man har indtastet som sti...
NB: Man indtaster i en Type=Text hvilken sti man ønsker....

Kan DET så lade sig gøre?
Avatar billede eagleeye Praktikant
18. august 2004 - 23:03 #14
ja du putter bare det man har tastet ind i input feltet ind i variablen nyefolder.
Hvis foldren findes i forvejen fejler koden ikke.

nyefolder = Reqest.form("NAVN_PÅ_INPUT_HVOR_STIEN_ANGIVES")
Avatar billede eagleeye Praktikant
29. august 2004 - 00:05 #15
Fik du det til at virke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester