Avatar billede vandpiben Nybegynder
10. januar 2004 - 01:42 Der er 5 kommentarer og
1 løsning

Hjælp til upload: filstørrelse og type billede

Jeg skal have lavet sådan at hvis størrelsen er over 250kb så uploader den ikke og hvis det ikke er gif/jpg så skal den heller ikke uploade... Nogle der kan hjælpe mig med den lille opgave :D her er koden jeg bruger...

<%    @EnableSessionState    = False %>
<%    Option Explicit %>
<%    Response.Expires    = 0 %>
<%
    Dim UPLOAD_PATH
        UPLOAD_PATH    = Server.MapPath("files")

    Dim g_oFso, g_oFolder, g_oFile
        Set g_oFso    = Server.CreateObject("Scripting.FileSystemObject")
        Set g_oFolder    = g_oFso.getFolder(UPLOAD_PATH)

    If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
        Dim g_oUpload
            Set g_oUpload    = get_upload_files()

        Dim fpos, fcontent, DSN, my_conn, SQL
            fcontent    = g_oUpload("upload").Item("content")
        Set g_oFile    = g_oFso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(g_oUpload("upload").Item("filename")))

        For fpos = 1 to LenB(fcontent)
            g_oFile.Write chr(AscB(MidB(fcontent, fpos, 1)))
        Next
        g_oFile.Close: Set g_oFile    = Nothing

        Response.Redirect Request.ServerVariables("SCRIPT_NAME")
    End If

    Response.Write "<html><body><table>"
    Response.Write "<tr><td><hr></td></tr>"
    For Each g_oFile In g_oFolder.Files
        Response.Write "<tr><td><a href=""files/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
    Next
    Response.Write "<tr><td><hr></td></tr>"
    Response.Write "<tr><td align=""right""><form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """>"
    Response.Write "<input type=""file"" name=""upload""> &nbsp; <input type=""submit"" value=""upload""></td></tr>"
    Response.Write "</table></body></html>"

%>
<%
    Function get_upload_files()
        Dim upload_object, request_binaries
        Dim position_start, position_end
        Dim boundary, boundary_pos

        Set upload_object        = Server.CreateObject("Scripting.Dictionary")
        request_binaries        = Request.BinaryRead(Request.TotalBytes)
        position_start        = 1
        position_end        = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
        boundary            = MidB(request_binaries, position_start, (position_end - position_start))
        boundary_pos        = InstrB(1, request_binaries, boundary)

        Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
            If Not(Response.IsClientConnected) Then Response.End

            Dim name, pos_file, DSN, my_conn, SQL

            position_start    = (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
            position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))
            name        = get_string(MidB(request_binaries, position_start, (position_end - position_start)))
            pos_file        = InstrB(boundary_pos, request_binaries, get_byte_string("filename="))


            If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
                upload_object.Add name, Server.CreateObject("Scripting.Dictionary")

                position_start    = (pos_file + 10)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))
                upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
                upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (position_end + 4)
                position_end    = InstrB(position_start, request_binaries, boundary) - 2
                upload_object.item(name).Add "size", ((position_end - position_start))
                upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))
            End If
            boundary_pos    = InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
        Loop

        Set get_upload_files = upload_object
    End Function

    Function get_byte_string(str)
        Dim cnt
        For cnt = 1 to Len(str)
            get_byte_string    = get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
        Next
    End Function

    Function get_string(str)
        Dim cnt
        For cnt = 1 to LenB(str)
            get_string    = get_string & chr(AscB(MidB(str, cnt, 1)))
        Next
    End Function

    Function extract_filename(filename)
        extract_filename    = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
        Set my_conn = Server.CreateObject("ADODB.Connection")
        DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("data.mdb")
        my_Conn.Open DSN
        SQL = "UPDATE user SET picture = '"&extract_filename&"' WHERE id = 1"
        my_conn.execute(SQL)
    End Function




%>
Avatar billede The Real Yoda Juniormester
10. januar 2004 - 01:47 #1
brug dette serverkomponent i stedet.. det er gratis at bruge.. og giver en del fede muligheder..

http://www.aspsmart.com/aspSmartUpload/

eksempel på upload med restriktioner..

<%
  On Error Resume Next

'  Variables
'  *********
  Dim mySmartUpload
  Dim intCount
       
'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  Only allow txt or htm files
'  ***************************
  mySmartUpload.AllowedFilesList = "htm,txt"

'  DeniedFilesList can also be used :
  ' Allow all files except exe, bat and asp
  ' ***************************************
  ' mySmartUpload.DeniedFilesList = "exe,bat,asp"

'  Deny physical path
'  *******************
  mySmartUpload.DenyPhysicalPath = True

'  Only allow files smaller than 50000 bytes
'  *****************************************
  mySmartUpload.MaxFileSize = 50000

'  Deny upload if the total fila size is greater than 200000 bytes
'  ***************************************************************
  mySmartUpload.TotalMaxFileSize = 200000

'  Upload
'  ******
  mySmartUpload.Upload

'  Save the files with their original names in a virtual path of the web server
'  ****************************************************************************
  intCount = mySmartUpload.Save("/aspSmartUpload/Upload")
  ' sample with a physical path
  ' intCount = mySmartUpload.Save("c:\temp\")

'  Trap errors
'  ***********
  If Err Then
      Response.Write("<b>Wrong selection : </b>" & Err.description)
  Else
  '  Display the number of files uploaded
  '  ************************************
      Response.Write(intCount & " file(s) uploaded.")
  End If
%>
Avatar billede eagleeye Praktikant
10. januar 2004 - 01:52 #2
Du kan prøve at tilføje til så dette:

    If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
        Dim g_oUpload
            Set g_oUpload    = get_upload_files()


Bliver til dette:

    If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
        Dim g_oUpload

        if Clng(Request.TotalBytes) > Clng(300000) then
          Response.Write "Filen er for stor!"
          Response.End
        End if
        Set g_oUpload    = get_upload_files()
Avatar billede eagleeye Praktikant
10. januar 2004 - 12:41 #3
Skiftede du til ASPSmartUpload ???
Avatar billede The Real Yoda Juniormester
10. januar 2004 - 15:18 #4
eagle.. det kunne det tyde på.. men et eller andet sted er det vel også det smarteste hvis man ligesom mig ik fatter en meter af den anden kode og bare har nuppet den et sted..

så er det jo en del nemmere at holde styr på det komponent, og der er jo masser af muligheder for kontrol..  :-)
Avatar billede eagleeye Praktikant
10. januar 2004 - 15:38 #5
Helt sikkert det bedste er at bruge en komponent, det bare ikke altid man har den mulighed.
Avatar billede The Real Yoda Juniormester
10. januar 2004 - 15:44 #6
Det er jo så rigtigt nok.. men de fleste seriøse asp-webhosts stiller smartaspupload eller et andet uploadkomponent til rådighed..
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