Avatar billede heyde Nybegynder
25. april 2003 - 01:36 Der er 13 kommentarer og
1 løsning

Upload af billede til server

Er der nogen der kan komme med et godt forslag til hvordan jeg gør følgende?

Jeg har en side, der kører på en MySQL database, hvor sportsfolk kan lægge profiler ind af dem selv. Her skal man blandt andet kunne uploade et billede (kun gif eller jpg).
Billedet skal gemmes på serveren i en sti der hedder "images/profiler", og navnet på billedet skal være det samme som personens ID i databasen (hedder personID).

I databasen er der også et "picture"-felt ved personerne. Her har jeg tænkt på at der kan stå enten "gif" eller "jpg", så jeg på den måde nemt kan finde ud af hvilken slags fil der skal loades, og på samme måde vide om personen har uploadet et billede (hvis der ikke er noget vil feltet jo bare være NULL).

Maks-størrelsen på billedet skal være 100.000 bytes (passer det mon ikke meget godt?)

Jeg har en idé om at målene på det billede man uploader højest kan være 120x160px, men jeg ved ikke om det er nok bare at checke for filstørelsen, og så korrigere målene på billedet når det skal vises. Hvad er mon bedst?

Jeg har selv prøvet at gøre ovenstående med aspSmartUpload, men jeg kender desværre ikke så meget til det (endnu), så det er ikke gået så godt...

Jeg ser frem til at se nogle gode løsninger.
Avatar billede dk_akj Nybegynder
25. april 2003 - 08:00 #1
Her er en meget simpel demo på brug af aspsmart upload komponenten.

http://www.aspsmart.com/scripts/aspSmartUpload/publigen/content/templates/show.asp?P=351&L=EN

Jeg vil foreslå at du starter med at kigge dette eks. og så arbejder videre udfra dette.

Er der problemmer spørger du bare.

//akj
Avatar billede dk_akj Nybegynder
25. april 2003 - 08:03 #2
Hov... glemte lige linket til den modtagende side.
http://www.aspsmart.com/scripts/aspSmartUpload/publigen/content/templates/show.asp?P=356&L=EN

Ang. max billedstørrelse kan du bruge aspimage eller lign til at resize billedet når det uploades.

//akj
Avatar billede heyde Nybegynder
25. april 2003 - 10:39 #3
Ok, det har hjulpet mig MEGET!
Men jeg kan ikke helt finde ud af hvordan jeg gemmer billedet med et andet navn, og jeg kunne også godt tænke mig at placere filtypen i en variabel, så jeg kan smække den op i databasen.

Her er hvad jeg har lavet:
Dim mySmartUpload
Dim intCount

Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

mySmartUpload.CodePage = "utf-8"
mySmartUpload.Upload

intCount = mySmartUpload.Save("/floorballplayers/images/profiler")
Avatar billede dk_akj Nybegynder
25. april 2003 - 10:44 #4
Det lyder da dejligt at du er kommet videre og sikkert også har lært noget :-)


Fpr at gemme under et nyt navn skal du fjerne denne linie (evt bare med en gnyf ' )
intCount = mySmartUpload.Save("/floorballplayers/images/profiler")
og istedet skrive
mysmartUpload.files.item(1).saveas "/floorballplayers/images/profiler/" & NytFilnavn

For at få extension kan du evt. gøre sådan.

ext = right(mysmartUpload.files.item(1).filename,3)

//akj
Avatar billede heyde Nybegynder
25. april 2003 - 11:33 #5
Så er jeg kommet et stykke videre med det. Jeg har droppet det med at gemme filen under et andet navn (lige nu), men kan stadig ikke lige få det til at fungere.
Her er koden:

dim strSaveImage

IF Request.QueryString("action") = "save" THEN
    IF Len(Request.Form("billede")) = 0 THEN
        strSaveImage = "INSERT INTO person (picture) VALUES (NULL)"
    ELSE
        Dim mySmartUpload
        Dim intCount
        dim ext
               
        Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
       
        mySmartUpload.CodePage = "utf-8"
        mySmartUpload.Upload
       
        intCount = mySmartUpload.Save("/floorballplayers/images/profiler")
        strSaveImage = "INSERT INTO person (picture) VALUES ('" & mysmartUpload.files.item(1).filename & "')"
        Con.Execute strSaveImage
    END IF
ELSE
    Response.Write "<form name=""createprofile"" method=""post"" action=""test.asp?action=save"">"
    Response.Write "Billede: "
    Response.Write "<INPUT type=""file"" name=""billede""><br>"
    Response.Write "<input type=""submit"" name=""Submit"" value=""Ok"">"
    Response.Write "<input type=""reset"" name=""Submit"" value=""Nulstil"">"   
    Response.Write "</form>"
END IF

Når jeg kører den får jeg denne fejlmelding:
"Cannot call BinaryRead after using Request.Form collection."
Det fatter jeg altså ikke... Hvad gør jeg galt?

Du skal ikke tage dig så meget af sql-sætningerne. De er kun til at teste...
Avatar billede dk_akj Nybegynder
25. april 2003 - 12:00 #6
prøv lige at ændre
Response.Write "<form name=""createprofile"" method=""post"" action=""test.asp?action=save"">"

Til:
Response.Write "<form name=""createprofile"" method=""post"" action=""test1.asp"">"

Og så flyt upload koden til test1.asp

Problemmet opstår når man blander request.form/querystring og uploadobjecter.

test1.asp:

Dim mySmartUpload
        Dim intCount
        dim ext
               
        Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
       
        mySmartUpload.CodePage = "utf-8"
        mySmartUpload.Upload
       
        intCount = mySmartUpload.Save("/floorballplayers/images/profiler")
        strSaveImage = "INSERT INTO person (picture) VALUES ('" & mysmartUpload.files.item(1).filename & "')"
        Con.Execute strSaveImage
    END IF


//akj
Avatar billede heyde Nybegynder
25. april 2003 - 12:52 #7
Jeg har desværre ret mange problemer med "Cannot call BinaryRead after using Request.Form collection.".

Du får lige hele koden her (den er lidt lang):
<%
Dim ID 'SpillerID
Dim spillerID
Dim validated
Dim VarEmail

Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "Driver={mySQL}; Server=localhost; Option=16834; Database=spillerdb;"

sub Billede
'    IF Len(Request.Form("billede")) = NULL THEN
'        strSQL = strSQL & " NULL,"
'    ELSE
        Dim mySmartUpload
        Dim intCount
'        dim ext
               
        Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
       
        mySmartUpload.CodePage = "utf-8"
        mySmartUpload.Upload
       
        intCount = mySmartUpload.Save("/floorballplayers/images/profiler")
'        ext = right(mysmartUpload.files.item(1).filename,3)
'        mysmartUpload.files.item(1).saveas "/floorballplayers/images/profiler/" & spillerID & "." & ext
        strSQL = strSQL & " '" & mysmartUpload.files.item(1).filename & "',"
        Con.Execute strSQL
'    END IF
end sub

sub birthdate
    IF Len(Request.Form("birthdate")) = 0 THEN
        validated = FALSE
    ELSE
        Dim bDate
        bDate = DateValue(Request.Form("birthdate"))
        strSQL = strSQL & " '" & Year(bDate) & "-" & Month(bDate) & "-" & Day(bDate) & "',"
    END IF
end sub

sub firstname
    IF Len(Request.Form("firstname")) = 0 THEN
        validated = FALSE
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("firstname"), "'", "''") & "',"
    END IF
end sub

Sub lastname
    IF Len(Request.Form("lastname")) = 0 THEN
        validated = FALSE
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("lastname"), "'", "''") & "',"
    END IF
end sub

sub sex
    strSQL = strSQL & " '" & Request.Form("køn") & "',"
end sub

sub telephone
    IF Len(Request.Form("telefon")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("telefon"), "'", "''") & "',"
    END IF
end sub

sub mobile
    IF Len(Request.Form("mobil")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("mobil"), "'", "''") & "',"
    END IF
end sub

sub email
    IF Len(Request.Form("email")) < 6 OR InStr(Request.Form("email"),"@") = 0 THEN
        validated = FALSE
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("email"), "'", "''") & "',"
    END IF
end sub

sub styrker
    IF Len(Request.Form("styrker")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Request.Form("styrker") & "',"
    END IF
end sub

sub fremtid
    IF Len(Request.Form("fremtid")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Request.Form("fremtid") & "',"
    END IF
end sub

sub andet
    IF Len(Request.Form("andet")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Request.Form("andet") & "',"
    END IF
end sub

sub profession
    IF Len(Request.Form("profession")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Request.Form("profession") & "',"
    END IF
end sub

sub hjemmeside
    IF Len(Request.Form("hjemmeside")) = 0 THEN
        strSQL = strSQL & " NULL,"
    ELSE
        strSQL = strSQL & " '" & Replace(Request.Form("hjemmeside"), "'", "''") & "',"
    END IF
end sub

'Gem data

validated = TRUE

'Check om email adressen eksisterer i forvejen
'*********************************************
    VarEmail = Replace(Request.Form("email"), "'", "''")
    strSQL = "SELECT email FROM person"
   
    set rs = con.execute(strSQL)
   
    do while not rs.EOF
        IF VarEmail = rs("email") THEN
            validated = FALSE
        END IF
        rs.movenext
    LOOP
'*********************************************

IF validated THEN       
    strSQL = " INSERT INTO person (picture, FDato, fornavn, efternavn, kønID, telefon, mobil, email, sprogID, nationalitetID,"
    strSQL = strSQL & " positionID, skudsideID, kondition, slagskud, trækskud, pasninger, hurtighed, overblik, teknik,"
    strSQL = strSQL & " dribling, holdånd, disciplin, taktik, fightervilje, styrker,"
    strSQL = strSQL & " fremtid, andet, profession, ledig, DateAdded, hjemmeside, jobID)"
    strSQL = strSQL & " VALUES ("

    Call Billede
    Call birthdate
    Call firstname
    Call lastname
    Call sex
    Call telephone
    Call mobile
    Call email

    strSQL = strSQL & " '" & Request.Form("sprog") & "',"
    strSQL = strSQL & " '" & Request.Form("nationalitet") & "',"
    strSQL = strSQL & " '" & Request.Form("position") & "',"
    strSQL = strSQL & " '" & Request.Form("skudside") & "',"
    strSQL = strSQL & " '" & Request.Form("kondition") & "',"
    strSQL = strSQL & " '" & Request.Form("slagskud") & "',"
    strSQL = strSQL & " '" & Request.Form("traekskud") & "',"
    strSQL = strSQL & " '" & Request.Form("pasninger") & "',"
    strSQL = strSQL & " '" & Request.Form("hurtighed") & "',"
    strSQL = strSQL & " '" & Request.Form("overblik") & "',"
    strSQL = strSQL & " '" & Request.Form("teknik") & "',"
    strSQL = strSQL & " '" & Request.Form("dribling") & "',"
    strSQL = strSQL & " '" & Request.Form("holdaand") & "',"
    strSQL = strSQL & " '" & Request.Form("disciplin") & "',"
    strSQL = strSQL & " '" & Request.Form("taktik") & "',"
    strSQL = strSQL & " '" & Request.Form("fightervilje") & "',"

    Call styrker
    Call fremtid
    Call andet
    Call profession

    strSQL = strSQL & " '" & Request.Form("ledig") & "',"
    strSQL = strSQL & " '" & Date() & "',"

    Call hjemmeside

    strSQL = strSQL & " '1')"
       
    IF validated THEN
        Con.Execute strSQL
           
        strSQL = "SELECT spillerID AS ID, email FROM person WHERE"
        strSQL = strSQL & " email = '"
        strSQL = strSQL & VarEmail
        strSQL = strSQL & "'"
           
        set rs = con.execute(strSQL)
        spillerID = rs("ID")
           
        If Request.Form("klub") = "0" THEN
            IF Len(Request.Form("nyklub")) = 0 THEN
                validated = FALSE
            ELSE
                StrSQL = "INSERT INTO klub (klubnavn) VALUES ("
                StrSQL = StrSQL & " '" & Replace(Request.Form("nyklub"), "'", "''") & "')"
                Con.Execute strSQL
                                           
                Dim klubID
                StrSQL = "SELECT klubID FROM klub WHERE klubnavn = '" & Replace(Request.Form("nyklub"), "'", "''") & "'"
                Set rs = con.Execute(StrSQL)
                klubID = rs("klubID")                       
            END IF
            strSQL = "INSERT INTO klubdiv (spillerID, klubID, divisionID, nuværende)"
            strSQL = strSQL & " VALUES ("
            strSQL = strSQL & " '" & spillerID & "',"
            strSQL = strSQL & " '" & klubID & "',"
            strSQL = strSQL & " '" & Request.Form("division") & "',"
            strSQL = strSQL & " '1')"
            Set rs = con.Execute(StrSQL)
        ELSE
            strSQL = "INSERT INTO klubdiv (spillerID, klubID, divisionID, nuværende)"
            strSQL = strSQL & " VALUES ("
            strSQL = strSQL & " '" & spillerID & "',"
            strSQL = strSQL & " '" & Request.Form("klub") & "',"
            strSQL = strSQL & " '" & Request.Form("division") & "',"
            strSQL = strSQL & " '1')"
            Set rs = con.Execute(StrSQL)
        END IF
   
        strSQL = "INSERT INTO login (brugernavn, adgangskode, type, ID)"
        strSQL = strSQL & " VALUES ("
        IF Len(Request.Form("brugernavn")) = 0 THEN
            validated = FALSE
        ELSE
            strSQL = strSQL & " '" & Replace(Request.Form("brugernavn"), "'", "''") & "',"
        END IF
        IF Len(Request.Form("adgangskode")) = 0 THEN
            validated = FALSE
        ELSE
            strSQL = strSQL & " '" & Replace(Request.Form("adgangskode"), "'", "''") & "',"
        END IF
        strSQL = strSQL & " '1',"
        strSQL = strSQL & " '" & spillerID & "')"
       
        IF validated THEN
            Con.Execute strSQL
            Response.Write "Du har nu oprettet en profil!"
        ELSE
            Response.Write "Du mangler at udfylde noget. Gå tilbage og prøv igen..."
        END IF
    ELSE
        Response.Write "E-mail adressen eksisterer allerede. Klik [her] hvis du har glemt dit brugernavn/adgangskode."
    END IF
END IF
%>


Som du kan se bruger jeg request.form ret mange steder. Kan der mon gøres noget andet i stedet for? Det er vel det samme problem hvis jeg bruger request.querystring...
Avatar billede dk_akj Nybegynder
25. april 2003 - 12:55 #8
Du kan ikke bruge request.form og upload på samme side.

Prøv at erstatte Request.Form("xyz") med mysmartUpload.form("xyz")

//akj
Avatar billede heyde Nybegynder
25. april 2003 - 13:53 #9
Kan jeg ikke maile nogle filer til dig? Så er det måske nemmere at løse fejlene. Jeg er kørt helt sur i det lige nu. Det er lige meget hvad jeg gør, så er der fejl :(
Avatar billede dk_akj Nybegynder
25. april 2003 - 13:58 #10
min adr er på mit brugerinfo.

//akj
Avatar billede dk_akj Nybegynder
26. april 2003 - 08:02 #11
jeg kigger på det i eftermiddag/aften

//akj
Avatar billede dk_akj Nybegynder
26. april 2003 - 22:08 #12
jeg har ikke kunnet bruge det di sendte da jeg manglede en db.

Jeg har lavet dette eks:

side1.asp er siden hvor du uploader fra.

side2.asp tager imod data fra side1.asp

************ start side1.asp *************
<HTML>
<BODY BGCOLOR="white">
<HR>

<form action="side2.asp" method="post" enctype="multipart/form-data" name="PW" id="PW">
  <table CELLSPACING="0" CELLPADDING="3" BORDER="1" WIDTH="474">

<!-- FILE -->
    <tr>
      <td><small><font face="Verdana">Billede </font></small></td>
      <td><small><font face="Verdana"><input TYPE="file" name="FILE1"></font></small></td>
    </tr>


<!-- TEXT -->
    <tr>
      <td width="150"><div align="left"><p><small><font face="Verdana">Nyt filnavn :&nbsp; </font></small></td>
      <td width="324"><small><font face="Verdana"><input TYPE="TEXT" name="myText" value=""><br></font></small></td>
    </tr>

<!-- TEXTAREA -->
    <tr>
      <td width="150"><div align="left"><p><small><font face="Verdana">Beskrivelse :&nbsp; </font></small></td>
      <td width="324"><small><font face="Verdana"><textarea name="myTextArea" rows="4" value=""></textarea><br></font></small></td>
    </tr>

  </table>


<input type="button" name="upload" value="Upload" onClick="inputcheck(); "> 

</form>

<script language="JavaScript">

function inputcheck(){
    var file;
    var newname;
    var desc;

    file = document.PW.FILE1.value;
    newname = document.PW.myText.value;
    desc = document.PW.myTextArea.value;
    if (file.length < 1) {
        alert("Der skal vælges en fil");
        return false;
    }

    if (newname.length < 1) {
        alert("Der skal indtastes nyt filnavn");
        return false;
    }

    if (desc.length < 1) {
        alert("Der skal indtastes en beskrivelse");
        return false;
    }
document.PW.submit();

   
}
</script>

</BODY>
</HTML>
************ slut  side1.asp *************
************ start side2.asp *************
<HTML>
<BODY BGCOLOR="white">


<HR>

<%
'  Variables
'  *********
  Dim mySmartUpload
  Dim item
  Dim value
  Dim file
  dim nytfilnavn   
'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  Upload
'  ******
  mySmartUpload.Upload
 
  ' gem filen med det navn der blev angivet på side 1
  nytfilnavn = mysmartUpload.form("mytext")
 
    nytfilnavn = server.mappath(".") & "\" & nytfilnavn
      ret = mysmartUpload.files.item(1).saveas ("" & nytfilnavn & "")

    response.write "gemt som : " & nytfilnavn
    response.write "<br>"

    response.write "indtastet text:" & mysmartUpload.form("myTextArea")
   

%>
</BODY>
</HTML>

************ slut  side2.asp *************

//akj
Avatar billede heyde Nybegynder
26. april 2003 - 22:42 #13
Det ser godt ud. Jeg prøver at smække det ind i mine sider.
MANGE tak for hjælpen!
Avatar billede dk_akj Nybegynder
27. april 2003 - 11:20 #14
selvtak

//akj
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