upload large files not working

Discussion in 'ASP General' started by erin.sebastian@cowaninsurancegroup.com, Dec 1, 2005.

  1. Guest

    Hello Everyone,
    I have code that uploads files in asp. It seems to be working however
    on files > 200kb it bombs and i don't know why. Does anyone have any
    idea of why this would occur and what i can do to fix it? Thank you in
    advance!!!!
    , Dec 1, 2005
    #1
    1. Advertising

  2. Tim Slattery Guest

    wrote:

    >Hello Everyone,
    >I have code that uploads files in asp. It seems to be working however
    >on files > 200kb it bombs and i don't know why. Does anyone have any
    >idea of why this would occur and what i can do to fix it? Thank you in
    >advance!!!!


    Are you using a component to upload the file? Does that component have
    a limit somewhere? If you're using VBScript or serverside Javascript
    to do it, can you post the code?

    This question cannot be answered in a vacuum.

    --
    Tim Slattery
    MS MVP(DTS)
    Tim Slattery, Dec 1, 2005
    #2
    1. Advertising

  3. Guest

    Tim Slattery wrote:
    > wrote:
    >
    > >Hello Everyone,
    > >I have code that uploads files in asp. It seems to be working however
    > >on files > 200kb it bombs and i don't know why. Does anyone have any
    > >idea of why this would occur and what i can do to fix it? Thank you in
    > >advance!!!!

    >
    > Are you using a component to upload the file? Does that component have
    > a limit somewhere? If you're using VBScript or serverside Javascript
    > to do it, can you post the code?
    >
    > This question cannot be answered in a vacuum.
    >
    > --
    > Tim Slattery
    > MS MVP(DTS)
    >


    I am not using a component to upload the file and there is a limit but
    it's 1024k which is WELL above the files size that i am trying to
    upload. I will post the code later tonight as i don't have it with me
    at the moment. I am using VBScript and the source code was not created
    by me i'm taking it over for another company. I will post the code
    around 8pm tonight. thanks
    Thanks for your response.
    Erin
    , Dec 1, 2005
    #3
  4. Guest

    As promised here is the code, i thikn this is all that is used to do
    the uploading (the second function is quite big).. thanks so much for
    looking at this!!!!!

    The first method called

    Sub
    ProcessUpload(pau_thePath,pau_Extensions,pau_Redirect,pau_storeType,pau_sizeLimit,pau_nameConflict,pau_requireUpload,pau_minWidth,pau_minHeight,pau_maxWidth,pau_maxHeight,pau_saveWidth,pau_saveHeight,pau_timeout)
    Server.ScriptTimeout = pau_timeout
    pau_doPreUploadChecks pau_sizeLimit
    RequestBin = Request.BinaryRead(Request.TotalBytes)
    Set UploadRequest = CreateObject("Scripting.Dictionary")
    pau_BuildUploadRequest RequestBin, pau_thePath, pau_storeType,
    pau_sizeLimit, pau_nameConflict
    If pau_Redirect <> "" Then
    If UploadQueryString <> "" Then
    pau_Redirect = pau_Redirect & "?" & UploadQueryString
    End If'

    Response.Redirect(pau_Redirect)
    end if
    End Sub

    ===========================================================
    pau_builduploadrequest

    Sub
    pau_BuildUploadRequest(RequestBin,UploadDirectory,storeType,sizeLimit,nameConflict)
    Dim Boundary, FormInfo, TypeArr, BoundaryArr, BoundaryPos, Pos, PosLen
    Dim PosFile, Name, PosBound, FileName, ContentType, Value, ValueBeg,
    ValueEnd, ValueLen
    'Check content type
    TypeArr = Split(Request.ServerVariables("HTTP_Content_Type"), ";")
    if Trim(TypeArr(0)) <> "multipart/form-data" then
    Response.Write "<b>Form was submitted with no
    ENCTYPE=""multipart/form-data""</b><br/>"
    Response.Write "Please correct and <a
    href=""javascript:history.back(1)"">try again</a>"
    Response.End
    end if
    'Get the boundary
    PosBeg = 1
    PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(13)))
    if PosEnd = 0 then
    Response.Write "<b>Form was submitted with no
    ENCTYPE=""multipart/form-data""</b><br>"
    Response.Write "Please correct and <A
    HREF=""javascript:history.back(1)"">try again</a>"
    Response.End
    end if
    boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    boundaryPos = InstrB(1,RequestBin,boundary)
    'Get all data inside the boundaries
    Do until (boundaryPos=InstrB(RequestBin,boundary &
    pau_getByteString("--")))
    'Members variable of objects are put in a dictionary object
    Dim UploadControl
    Set UploadControl = CreateObject("Scripting.Dictionary")
    'Get an object name
    Pos =
    InstrB(BoundaryPos,RequestBin,pau_getByteString("Content-Disposition"))
    Pos = InstrB(Pos,RequestBin,pau_getByteString("name="))
    PosBeg = Pos+6
    PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(34)))
    Name = LCase(pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg)))
    PosFile =
    InstrB(BoundaryPos,RequestBin,pau_getByteString("filename="))
    PosBound = InstrB(PosEnd,RequestBin,boundary)
    'Test if object is of file type
    If PosFile<>0 AND (PosFile<PosBound) Then
    'Get Filename, content-type and content of file
    PosBeg = PosFile + 10
    PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(34)))
    FileName = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    FileName =
    pau_RemoveInvalidChars(Mid(FileName,InStrRev(FileName,"\")+1))
    'Add filename to dictionary object
    UploadControl.Add "FileName", FileName
    Pos = InstrB(PosEnd,RequestBin,pau_getByteString("Content-Type:"))
    PosBeg = Pos+14
    PosEnd = InstrB(PosBeg,RequestBin,pau_getByteString(chr(13)))
    'Add content-type to dictionary object
    ContentType = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    UploadControl.Add "ContentType",ContentType
    'Get content of object
    PosBeg = PosEnd+4
    PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    Value = FileName
    ValueBeg = PosBeg-1
    ValueLen = PosEnd-Posbeg
    Else
    'Get content of object
    Pos = InstrB(Pos,RequestBin,pau_getByteString(chr(13)))
    PosBeg = Pos+4
    PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    Value = pau_getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    ValueBeg = 0
    ValueEnd = 0
    End If
    'Add content to dictionary object
    UploadControl.Add "Value" , Value
    UploadControl.Add "ValueBeg" , ValueBeg
    UploadControl.Add "ValueLen" , ValueLen
    'Add dictionary object to main dictionary
    if UploadRequest.Exists(name) then
    UploadRequest(name).Item("Value") =
    UploadRequest(name).Item("Value") & "," & Value
    else
    UploadRequest.Add name, UploadControl
    end if
    'Loop to next object
    BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
    Loop
    Dim GP_keys, GP_i, GP_curKey, GP_value, GP_valueBeg, GP_valueLen,
    GP_curPath, GP_FullPath
    Dim GP_CurFileName, GP_FullFileName, fso, GP_BegFolder, GP_RelFolder,
    GP_FileExist, Begin_Name_Num
    Dim orgUploadDirectory
    if InStr(UploadDirectory,"""") > 0 then
    'on error resume next
    orgUploadDirectory = UploadDirectory
    UploadDirectory = eval(UploadDirectory)
    if err then
    Response.Write "<b>Upload folder is invalid</b><br/><br/>"
    Response.Write "Upload Folder: " & Trim(orgUploadDirectory) &
    "<br/>"
    Response.Write "Please correct and <a
    href=""javascript:history.back(1)"">try again</a>"
    err.clear
    response.End
    end if
    'on error goto 0
    end if
    GP_keys = UploadRequest.Keys
    for GP_i = 0 to UploadRequest.Count - 1
    GP_curKey = GP_keys(GP_i)
    'Save all uploaded files
    if UploadRequest.Item(GP_curKey).Item("FileName") <> "" then
    GP_value = UploadRequest.Item(GP_curKey).Item("Value")
    GP_valueBeg = UploadRequest.Item(GP_curKey).Item("ValueBeg")
    GP_valueLen = UploadRequest.Item(GP_curKey).Item("ValueLen")
    'Get the path
    if InStr(UploadDirectory,"\") > 0 then
    GP_curPath = UploadDirectory
    if Mid(GP_curPath,Len(GP_curPath),1) <> "\" then
    GP_curPath = GP_curPath & "\"
    end if
    GP_FullPath = GP_curPath
    else
    GP_curPath = Request.ServerVariables("PATH_INFO")
    GP_curPath = Trim(Mid(GP_curPath,1,InStrRev(GP_curPath,"/")) &
    UploadDirectory)
    if Mid(GP_curPath,Len(GP_curPath),1) <> "/" then
    GP_curPath = GP_curPath & "/"
    end if
    GP_FullPath = Trim(Server.mappath(GP_curPath))
    end if
    if GP_valueLen = 0 then
    Response.Write "<b>An error has occured saving uploaded
    file!</b><br/><br/>"
    Response.Write "Filename: " & Trim(GP_curPath) &
    UploadRequest.Item(GP_curKey).Item("FileName") & "<br/>"
    Response.Write "File does not exists or is empty.<br/>"
    Response.Write "Please correct and <a
    href=""javascript:history.back(1)"">try again</a>"
    response.End
    end if
    'Create a Stream instance
    Dim GP_strm1, GP_strm2
    Set GP_strm1 = Server.CreateObject("ADODB.Stream")
    Set GP_strm2 = Server.CreateObject("ADODB.Stream")
    'Open the stream
    GP_strm1.Open
    GP_strm1.Type = 1 'Binary
    GP_strm2.Open
    GP_strm2.Type = 1 'Binary
    GP_strm1.Write RequestBin
    GP_strm1.Position = GP_ValueBeg
    GP_strm1.CopyTo GP_strm2,GP_ValueLen
    'Create and Write to a File
    GP_CurFileName = UploadRequest.Item(GP_curKey).Item("FileName")

    GP_FullFileName = GP_FullPath & "\" & GP_CurFileName
    Set fso = CreateObject("Scripting.FileSystemObject")
    pau_AutoCreatePath GP_FullPath
    'Check if the file already exist
    GP_FileExist = false
    If fso.FileExists(GP_FullFileName) Then
    GP_FileExist = true
    End If
    if nameConflict = "error" and GP_FileExist then
    Response.Write "<b>File already exists!</b><br/><br/>"
    Response.Write "Please correct and <a
    href=""javascript:history.back(1)"">try again</a>"
    GP_strm1.Close
    GP_strm2.Close
    response.End
    end if
    if ((nameConflict = "over" or nameConflict = "uniq") and
    GP_FileExist) or (NOT GP_FileExist) then
    if nameConflict = "uniq" and GP_FileExist then
    Begin_Name_Num = 0
    while GP_FileExist
    Begin_Name_Num = Begin_Name_Num + 1
    GP_FullFileName = Trim(GP_FullPath)& "\" &
    fso.GetBaseName(GP_CurFileName) & "_" & Begin_Name_Num & "." &
    fso.GetExtensionName(GP_CurFileName)
    GP_FileExist = fso.FileExists(GP_FullFileName)
    wend
    UploadRequest.Item(GP_curKey).Item("FileName") =
    fso.GetBaseName(GP_CurFileName) & "_" & Begin_Name_Num & "." &
    fso.GetExtensionName(GP_CurFileName)
    UploadRequest.Item(GP_curKey).Item("Value") =
    UploadRequest.Item(GP_curKey).Item("FileName")
    end if
    on error resume next
    GP_strm2.SaveToFile GP_FullFileName
    if err then
    err.clear
    Dim txt_stream, file_bin
    Set txt_stream = fso.CreateTextFile(GP_FullFileName, True)
    file_bin = pau_getString(MidB(RequestBin, GP_ValueBeg+1,
    GP_ValueLen))
    txt_stream.Write file_bin
    txt_stream.Close
    if err then
    GP_strm1.Close
    GP_strm2.Close
    Response.Write "<b>An error has occured saving uploaded
    file!</b><br/><br/>"
    Response.Write "Filename: " & GP_FullFileName & "<br/><br/>"
    if fso.FileExists(GP_FullFileName) then
    Dim f
    Response.Write "File exists on server!<br/>"
    Set f = fso.GetFile(GP_FullFileName)
    Response.Write "Attributes(" & f.attributes & "|" &
    f.parentfolder.attributes & "): "
    if f.attributes and 1 then
    Response.Write "ReadOnly "
    end if
    if f.attributes and 2 then
    Response.Write "Hidden "
    end if
    if f.attributes and 4 then
    Response.Write "System "
    end if
    if f.attributes and 16 then
    Response.Write "Directory "
    end if
    Response.Write "<br/><br/>"
    end if
    Response.Write "Error # " & CStr(Err.Number) & " " &
    Err.Description & "<br/>"
    Response.Write "in " & Err.Source & "(" & GP_strm2.state &
    ")<br/>"
    response.End
    end if
    end if
    GP_strm1.Close
    GP_strm2.Close
    if storeType = "path" then
    UploadRequest.Item(GP_curKey).Item("Value") = GP_curPath &
    UploadRequest.Item(GP_curKey).Item("Value")
    end if
    on error goto 0
    end if
    end if
    next
    End Sub
    , Dec 2, 2005
    #4
  5. Tim Slattery Guest

    wrote:

    >As promised here is the code, i thikn this is all that is used to do
    >the uploading (the second function is quite big).. thanks so much for
    >looking at this!!!!!
    >
    >The first method called
    >
    >Sub
    >ProcessUpload(pau_thePath, pau_Extensions, pau_Redirect, pau_storeType, pau_sizeLimit,
    > pau_nameConflict, pau_requireUpload, pau_minWidth, pau_minHeight, pau_maxWidth,
    > pau_maxHeight, pau_saveWidth, pau_saveHeight, pau_timeout)


    These arguments include a size limit and a timeout value. The size
    limit is passed to pau_BuildUploadRequest, which ignores it. The
    timeout is used to set Server.ScriptTimeout. If the timeout value is
    not large enough, it could be hit before a huge file has finished
    uploading.

    You never did say just *how* it bombs with a large file. What messages
    appear?

    > Server.ScriptTimeout = pau_timeout
    > pau_doPreUploadChecks pau_sizeLimit


    Don't know what pau_doPreUploadChecks does with the size limit - or
    what the size limit is, for that matter.

    > RequestBin = Request.BinaryRead(Request.TotalBytes)


    Total size of file(s) to be uploaded, I guess.

    > Set UploadRequest = CreateObject("Scripting.Dictionary")


    I assume that the UploadRequest hash is global, since
    pau_BuildUploadRequest uses it

    > pau_BuildUploadRequest RequestBin, pau_thePath, pau_storeType,
    > pau_sizeLimit, pau_nameConflict


    Size limit is passed here, but the sub doesn't use it.

    > If pau_Redirect <> "" Then
    > If UploadQueryString <> "" Then
    > pau_Redirect = pau_Redirect & "?" & UploadQueryString
    > End If'
    >
    > Response.Redirect(pau_Redirect)
    > end if
    >End Sub
    >
    >===========================================================
    >pau_builduploadrequest
    >
    >Sub
    >pau_BuildUploadRequest(RequestBin,UploadDirectory,storeType,sizeLimit,nameConflict)
    > Dim Boundary, FormInfo, TypeArr, BoundaryArr, BoundaryPos, Pos, PosLen
    > Dim PosFile, Name, PosBound, FileName, ContentType, Value, ValueBeg,
    >ValueEnd, ValueLen


    --
    Tim Slattery
    MS MVP(DTS)
    Tim Slattery, Dec 2, 2005
    #5
  6. Guest

    Hi Tim,
    thanks for your reply, actually i just get a 500 internal server error
    and that's the extent of it. I am pretty sure it has to do with the
    size of the file because any file under 200 kb will upload fine and I
    only get the error when i try to upload a bigger file. So if i up the
    timeout time and the filesize should that do the trick? or at least is
    it a place to start?
    Thanks,
    Erin
    , Dec 2, 2005
    #6
  7. Guest

    this is pau_doPreUploadChecks

    Sub pau_doPreUploadChecks(sizeLimit)
    Dim checkADOConn, AdoVersion, Length
    'Check ADO Version
    set checkADOConn = Server.CreateObject("ADODB.Connection")
    on error resume next
    adoVersion = CSng(checkADOConn.Version)
    if err then
    adoVersion = Replace(checkADOConn.Version,".",",")
    adoVersion = CSng(adoVersion)
    end if
    err.clear
    on error goto 0
    set checkADOConn = Nothing
    if adoVersion < 2.5 then
    Response.Write "<b>You don't have ADO 2.5 installed on the
    server.</b><br/>"
    Response.Write "The File Upload extension needs ADO 2.5 or greater to
    run properly.<br/>"
    Response.Write "You can download the latest MDAC (ADO is included)
    from <a
    href=""www.microsoft.com/data"">www.microsoft.com/data</a><br/>"
    Response.End
    end if
    'Check content length if needed
    Length = CLng(Request.ServerVariables("HTTP_Content_Length")) 'Get
    Content-Length header
    If sizeLimit <> "" Then
    sizeLimit = CLng(sizeLimit) * 1024
    If Length > sizeLimit Then
    Response.Write "Upload size " & FormatNumber(Length, 0) & "B exceeds
    limit of " & FormatNumber(sizeLimit, 0) & "B<br/>"
    Response.Write "Please correct and <a
    href=""javascript:history.back(1)"">try again</a>"
    Response.End
    End If
    End If
    End Sub
    , Dec 2, 2005
    #7
  8. Guest

    another thing i should mention, i don't get the error message "exceeds
    limit of ..." it just simply gives me a 500 internal server error.
    Thanks again,
    Erin
    , Dec 2, 2005
    #8
  9. wrote:
    > another thing i should mention, i don't get the error message "exceeds
    > limit of ..." it just simply gives me a 500 internal server error.
    > Thanks again,
    > Erin

    http://www.aspfaq.com/show.asp?id=2109
    --
    Microsoft MVP -- ASP/ASP.NET
    Please reply to the newsgroup. The email account listed in my From
    header is my spam trap, so I don't check it very often. You will get a
    quicker response by posting to the newsgroup.
    Bob Barrows [MVP], Dec 2, 2005
    #9
  10. Guest

    Thanks that's awesome!!
    now i am getting an "operation not allowed" on this line
    RequestBin = Request.BinaryRead(Request.TotalBytes)
    any idea's why????
    Thanks
    Erin
    , Dec 3, 2005
    #10
  11. read the 1st part

    http://www.powerasp.com/content/hintstips/common_sense.asp


    <> wrote in message
    news:...
    > Hi Tim,
    > thanks for your reply, actually i just get a 500 internal server error
    > and that's the extent of it. I am pretty sure it has to do with the
    > size of the file because any file under 200 kb will upload fine and I
    > only get the error when i try to upload a bigger file. So if i up the
    > timeout time and the filesize should that do the trick? or at least is
    > it a place to start?
    > Thanks,
    > Erin
    >
    Kyle Peterson, Dec 4, 2005
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Raj Tripathi

    Upload large files to server problem

    Raj Tripathi, Nov 20, 2003, in forum: ASP .Net
    Replies:
    1
    Views:
    405
    Alex Papadimoulis
    Nov 20, 2003
  2. Charlie@CBFC
    Replies:
    1
    Views:
    530
    Joshua Flanagan
    May 3, 2005
  3. =?Utf-8?B?U2FuZHk=?=

    upload very large files

    =?Utf-8?B?U2FuZHk=?=, Nov 2, 2006, in forum: ASP .Net
    Replies:
    2
    Views:
    401
    =?Utf-8?B?U2FuZHk=?=
    Nov 3, 2006
  4. Bobby Edward

    Control to upload LARGE files

    Bobby Edward, Nov 12, 2008, in forum: ASP .Net
    Replies:
    7
    Views:
    532
    Bobby Edward
    Nov 13, 2008
  5. Kilic Beg

    prevent Upload Large Files .Net

    Kilic Beg, Nov 24, 2004, in forum: ASP .Net Web Controls
    Replies:
    3
    Views:
    286
    Roger Helliwell
    Nov 25, 2004
Loading...

Share This Page