Avatar billede timmwillum Nybegynder
20. november 2007 - 21:00 Der er 9 kommentarer og
1 løsning

ASPupload - problemer med fejlhåndtering

Hej
Har problemer med fejlhåndtering i forbindelse med upload af billeder. Jeg oploader til memory først, for at kunne ændre navnet på filen ... tror måske det er det, som giver problemet. Når jeg prøver at oploade en for stor fil, får jeg ikke en fejlmeddelelse ... men filen oploades ikke (hvilket den jo heller ikke skal). Ville dog gerne have en fejlmeddelelse ... what to do?


    Set Upload = Server.CreateObject("Persits.Upload")
    ' we use memory uploads, so we must limit file size
    Upload.SetMaxSize 50000, True
    Upload.OverwriteFiles = False
    On Error Resume Next
   
    ' Save to memory. Path parameter is omitted
    Upload.Save
   
    ' Access subdirectory specified by user
    subdir = Upload.Form("subdir")
   

    ' her laver vi en variabel, så filnavne bliver unikke.. i dette tilfælde en masse tal
    NewName = right("0" & year(now), 2) & right("0" & month(now), 2) & right("0" & day(now), 2)
    NewName = NewName & hour(time) & minute(time) & second(time) & ".jpg"

   
    ' Build path string
    Path = Server.MapPath("\web\test\")
    'Path = "c:\webs\talkactive\web225253\makeaweb.dk\web\sandkasse\test\" & subdir
    'strMappath = "c:\webs\talkactive\web225253\makeaweb.dk\web\sandkasse\test\"
   
    'så gemmer vi
    For Each File in Upload.Files
      File.SaveAs Path & "\" & NewName
      'Response.Write "File saved as " & File.Path & "<BR>"
      KomprimerBillede(File.Path)
    Next

    ' Så må vi hellere lige undersøge om filen måske
    ' var for stor. Hvis filen var for står, får vi fejl nummer 8
    If Err.Number = 8 Then
      ' Den var for stor
      Response.Write "Filen er for stor. Prøv igen."
    Else
      ' Den var ikke for stor
      ' Opstod der en anden fejl ?
      If Err <> 0 Then
        ' Ja - fortæl brugeren det
        Response.Write "Der opstod en fejl : " & Err.Description
      Else
        ' Nej - det gik godt
        Response.Write intFileCount & " fil(er) uploadet.<br>" & vbCrLf
      End If
    End If
   
    ' Slå fejl-check til igen
    On Error Goto 0
   
    ' Så er vi færdige, så vi rydder pænt op efter os
    Set objUpload = Nothing
Avatar billede keysersoze Ekspert
20. november 2007 - 22:00 #1
http://support.persits.com/show.asp?code=PS031212120

Filen vil faktisk blive forsøgt uploadet - scriptet kender jo intet til filstørrelsen før filen ligger på serveren eller grænsen er nået.
Avatar billede timmwillum Nybegynder
21. november 2007 - 08:18 #2
Nu sidder jeg ikke ved min egen pc lige nu. Men det, du siger til mig, er, at jeg bare skal ændre "Upload.SetMaxSize 50000, True" til "Upload.SetMaxSize 50000, False" ... og så burde fejlen blive fanget og vist i fejlhåndteringen ...?

Glæder mig meget til at prøve i aften.
Avatar billede timmwillum Nybegynder
21. november 2007 - 08:20 #3
Skal da lige nævne, at jeg har prøvet bare at skrive "Upload.SetMaxSize 50000" (altså uden True efter) ... det virkede ikke. Vil det så gøre en forskel med "Upload.SetMaxSize 50000, False" mon?
Avatar billede fennec Nybegynder
21. november 2007 - 08:40 #4
Forskellen fra true til false er at filen bliver truncatet (klippet ned til 50000 byte størrelse), i stedet for at blive kastet væk.

Upload funktionen fejler ikke hvis filen er for stor, hvorfor du ikke kan fange nogen fejl med err.

På det link keysersoze har givet dig er der en fuld kode til en løsning på dit problem.

Ved at sætte den til false bliver filerne klippet. Derefter tjekker man hvilke filer er præsis den angivet størrelse.
Avatar billede timmwillum Nybegynder
21. november 2007 - 09:22 #5
ok ... så min fejlhåndtering, som det står nu, vil under ingen omstændigheder virke ...?

Løsningen er så selv at kontrollere filstørrelsen efter upload og så generere en fejlbesked, hvis filen har den præcise størrelse ... og så naturligvis slette den klippede fil bagefter.

Måske lidt søgt ... men hvad så hvis brugeren rent faktisk oploader en fil som er præcis 50000 byte? Det kan han jo så ikke ...
Avatar billede fennec Nybegynder
21. november 2007 - 10:21 #6
Filen ligger i hukommelsen, og er ikke gemt på disk endnu, så der er ikke noget at slette. Du skal bare søre for ikke at gemme den med "File.SaveAs Path".

Og ja der er desværre lukket for filer på præsis 50000 byte. Hvis du vil være super pernippen med det. Kan du jo fortælle dine brugere at filstørrelsen max må være 50000 byte også sætte limit til 50001. På den måde klipper den alle større filer hertil, og prøver de at uploade en fil på 50001 bliver den ikke klippet, men er pr difination stadig for stor :o)
Avatar billede keysersoze Ekspert
21. november 2007 - 19:44 #7
lige mine ord :)
Avatar billede keysersoze Ekspert
16. december 2007 - 11:05 #8
lukketid?
Avatar billede timmwillum Nybegynder
16. december 2007 - 21:59 #9
yeb ... helt klart lukketid. Nu er det bare sådan, at det aldrig er lykkedes mig at finde ud af hvordan man lukker tråde her på eksperten :-)

Men nu er point da sendt ... tak for hjælpen
Avatar billede keysersoze Ekspert
16. december 2007 - 22:24 #10
du lukker ved at acceptere et svar - så det har du lige gjort :)
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